c# – Put方法不可用(或在帮助中可见)
发布时间:2020-12-15 20:56:46 所属栏目:百科 来源:网络整理
导读:我有一个Web API 2控制器(PersonProfessionController)与以下PUT方法: [HttpPut][AcceptVerbs("PUT")]public void Put([FromBody]PersonProfessionModel value){ try { this.MyProfessionManager.Save(value.ToPersonProfession()); } catch (Exception ex)
我有一个Web API 2控制器(PersonProfessionController)与以下PUT方法:
[HttpPut] [AcceptVerbs("PUT")] public void Put([FromBody]PersonProfessionModel value) { try { this.MyProfessionManager.Save(value.ToPersonProfession()); } catch (Exception ex) { this.LogManager.Error(ex); } } 由于某种原因,它只是不可用.它也在api帮助概述页面中不可见. 另一方面,我在PersonController中有一个方法,如下所示: [HttpPut] [AcceptVerbs("PUT")] public void Put([FromBody]PersonModel value) { try { this.MyPersonManager.Save(value.ToPerson()); } catch (Exception ex) { this.LogManager.Error(ex); } } 这很好用. 题 尽管PersonController的PUT方法看起来与我的PersonProfessionController非常相似,但除了明显的差异之外,前者工作而后者不工作(甚至不可见). 知道发生了什么事吗? UPDATE 每个请求的完整PersonProfessionController类: public class PersonProfessionController : ApiController { private IPersonProfessionManager PersonProfessionManager { get; set; } private ILogManager LogManager { get; set; } public PersonProfessionController( IPersonProfessionManager PersonProfessionManager,ILogManager logManager) { this.PersonProfessionManager = PersonProfessionManager; this.LogManager = logManager; } [HttpGet] public IHttpActionResult Get(string languageCode,Guid id) { try { var result = this.PersonProfessionManager.Get(languageCode,id); if (result == null) return NotFound(); return Ok(result); } catch (Exception ex) { this.LogManager.Error(ex); } return NotFound(); } #region Save // PUT api/PersonProfession/save/ [HttpPut] [AcceptVerbs("PUT")] public void Put([FromBody]PersonPersonProfessionModel value) { try { this.PersonProfessionManager.Save(value.ToPersonProfession()); } catch (Exception ex) { this.LogManager.Error(ex); } } #endregion [HttpGet] public IHttpActionResult LoadPersonProfessionsForPersonAndDossier( string languageCode,Guid dossierId,Guid personId ) { try { var contextInformation = new ContextInformation { LanguageCode = languageCode,DossierId = dossierId,PersonId = personId }; var result = this.PersonProfessionManager.LoadPersonProfessionsForPersonAndDossier(contextInformation); if (result == null) return NotFound(); return Ok(result); } catch (Exception ex) { this.LogManager.Error(ex); } return NotFound(); } } 我手动修改了代码以使其品牌中立,如果我改变了不同的东西,这可能会导致不一致. 和路由,每个请求: config.Routes.MapHttpRoute( name: "Get PersonProfession",routeTemplate: "api/personprofession/{languageCode}/{id}",defaults: new { controller = "PersonProfession",action = "Get",languageCode = RouteParameter.Optional,id = RouteParameter.Optional }); config.Routes.MapHttpRoute( name: "LoadPersonProfessionsForPersonAndDossier",routeTemplate: "api/personprofession/LoadPersonProfessionsForPersonAndDossier/{languageCode}/{dossierId}/{personId}",action = "LoadPersonProfessionsForPersonAndDossier",dossierId = RouteParameter.Optional,personId = RouteParameter.Optional }); config.Routes.MapHttpRoute( name: "PersonProfession Put",routeTemplate: "api/personprofession/save/",defaults: new { controller = "PersonProfession",action = "Put" } ); 解决方法
找到了!这不起作用:
[HttpPut] [AcceptVerbs("PUT")] [Route("api/personprofession/save/")] public void Put([FromBody]PersonProfessionModel value) 这个工作: [HttpPut] [Route("api/personprofession/save/")] public void Put([FromBody]PersonProfessionModel value) 显然你不应该添加[AcceptVerbs(“PUT”)]. 它背后的原因令我感到困惑,但是你走了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |