【问题标题】:Fiddler post request to .net mvc controller returns 404Fiddler 向 .net mvc 控制器发送请求返回 404
【发布时间】:2015-10-23 13:10:17
【问题描述】:

我有控制器

    [HttpGet]
    public IHttpActionResult GetUserRights(int id)
    {
        var rights = _rightsService.GetUserRights(id);
        if (rights == null)
        {
            return new HttpActionResult(HttpStatusCode.BadRequest, "User not found");
        }
        return Ok(rights);
    }

    [HttpPost]
    public IHttpActionResult SetUserRights(int id, IEnumerable<EditRightViewModel> rights)
    {
        Result result = _rightsService.SetUserRights(id, rights);
        if (!result.IsSuccess)
        {
            return new HttpActionResult(HttpStatusCode.InternalServerError, result.Message);
        }
        return Ok(result.Data);
    }

    [HttpPost]
    public IHttpActionResult SetUserRights(int id, int RightId, bool Enable)
    {
        Result result = _rightsService.SetUserRights(id, new List<EditRightViewModel>
        {
            new EditRightViewModel
            {
                RightId = RightId,
                Enable = Enable
            }
        });
        if (!result.IsSuccess)
        {
            return new HttpActionResult(HttpStatusCode.InternalServerError, result.Message);
        }
        return Ok(result.Data);
    }

get 请求工作正常,但帖子返回 404。 请求是

User-Agent: Fiddler
Host: localhost:577
Content-Length: 44
Content-Type: application/json; charset=utf-8
{
"id":1,
"RightId":1,
"Enable":"true"
}

最初我想将数据发送到以列表为参数的发布操作。我认为它返回 404 的原因是 json 不适合函数的参数。所以我简化了 json 和 action 参数,但它仍然不起作用。也许有人可以告诉问题的原因是什么以及如何编写一个正确的json来发送列表作为参数?

【问题讨论】:

  • 发帖请求网址是什么?
  • 你能告诉我们请求的代码吗?
  • 该 url 是 /api/rights/SetUserRights 通过使此签名 IHttpActionResult SetUserRights(int id, EditRightViewModel editModel) 并在 url /api/rights/SetUserRights/1 中将 id 作为参数发送来管理发送请求 简单参数不能是 JSON 的一部分。他们必须去url参数

标签: json asp.net-mvc http fiddler


【解决方案1】:

404 错误主要发生在您的方法签名与您的 POST 数据不匹配或您的路由配置不正确时。

在这里看看我的回答 - Webservice return 404

我会更改方法签名以接受一个类。

public class UserRights
{
    public int id {get;set;}
    public int RightId {get;set;}
    public bool Enable {get;set;}
}

【讨论】:

    【解决方案2】:

    发布动作的正文中不能有最多一个参数。 使用您需要的参数创建一个类。 ASP NET 将进行绑定。

    public IHttpActionResult SetUserRights(Right right){ /* ... */ }
    
    public class Right {
        public int id { get; set; }
        public int RightId { get; set; }
        public bool Enable { get; set; }
    }
    

    试试这个。

    【讨论】:

    • 好的,但是想象一下我也有这个模型中的对象列表。那么这个方法应该组成什么json呢? { "UserId":1, "RightsToSet": [ { "RightId":1, "Enable":true, } { "RightId":2, "Enable":true, } { "RightId":3, "Enable":true, } ] }这不起作用:(方法中的模型变量为null
    • 你可以有一个属性IEnumerable&lt;&gt;,没问题。这个 JSON 有问题。列表RightsToSet的对象必须用,分隔:"RightsToSet": [ { ... }, { ... }, { ... } ]
    猜你喜欢
    • 2019-08-06
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2017-12-30
    • 2016-06-13
    相关资源
    最近更新 更多