gpt4 book ai didi

asp.net - 具有复杂对象的MVC WebApi HttpGet

转载 作者:行者123 更新时间:2023-12-04 10:40:14 26 4
gpt4 key购买 nike

我有一个现有的 WebApi 操作,我想从 HttpPost 切换到 HttpGet。它目前采用单个复杂对象作为参数。

型号:

public class BarRequest
{
[JsonProperty("catid")]
public int CategoryId { get; set; }
}

Controller :
public class FooController : ApiController
{
//[HttpPost]
[HttpGet]
[ActionName("bar")]
public void Bar([FromUri] BarRequest request)
{
if (request != null)
{
// CategoryId should be 123, not 0
Debug.WriteLine("Category ID :: {0}", request.CategoryId);
}
}
}

现在,当我发送以下请求时,一切都按预期进行。
GET /foo/bar?CategoryId=123

旧的 POST 请求也按预期工作。
POST /foo/bar {"catid":123}

但现在我需要以下请求才能工作:
GET /foo/bar?catid=123

我怎样才能做到这一点?

最佳答案

感谢您的建议,但对我有用的唯一解决方案如下。

之前:

var data = {
catid: 123,
// <snip>
};
var json = JSON.stringify(data);
$.post('/foo/bar', json, callback);

public class FooController : ApiController
{
[HttpPost, ActionName("bar")]
public void Bar(BarRequest request)
{
// use request.Category to process request
}
}

之后:
var data = {
catid: 123,
// <snip>
};
var json = JSON.stringify(data);
$.get('/foo/bar?data=' + encodeURIComponent(json), callback);

public class FooController : ApiController
{
[HttpGet, ActionName("bar")]
public void Bar(string data)
{
var request = JsonConvert.DeserializeObject<BarRequest>(data);
// use request.Category to process request
}
}

这样我就不需要在客户端或服务器上接触任何模型、验证器等。此外,其他所有解决方案都要求我更改服务器端或客户端的命名约定。

关于asp.net - 具有复杂对象的MVC WebApi HttpGet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15622852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com