加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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”)].

它背后的原因令我感到困惑,但是你走了.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读