我有一个现有的 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/