Dan*_*itz 7 asp.net json.net deserialization asp.net-web-api
我有一个现有的WebApi动作,我想从HttpPost切换到HttpGet.它目前需要一个复杂的对象作为参数.
该模型:
public class BarRequest
{
[JsonProperty("catid")]
public int CategoryId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在当我发送以下请求时,一切都按预期工作.
GET /foo/bar?CategoryId=123
Run Code Online (Sandbox Code Playgroud)
旧的POST请求也按预期工作.
POST /foo/bar {"catid":123}
Run Code Online (Sandbox Code Playgroud)
但现在我需要以下请求才能工作:
GET /foo/bar?catid=123
Run Code Online (Sandbox Code Playgroud)
我怎么能做到这一点?
Dan*_*itz 11
感谢您的建议,但唯一对我有用的解决方案如下.
之前:
var data = {
catid: 123,
// <snip>
};
var json = JSON.stringify(data);
$.post('/foo/bar', json, callback);
Run Code Online (Sandbox Code Playgroud)
public class FooController : ApiController
{
[HttpPost, ActionName("bar")]
public void Bar(BarRequest request)
{
// use request.Category to process request
}
}
Run Code Online (Sandbox Code Playgroud)
后:
var data = {
catid: 123,
// <snip>
};
var json = JSON.stringify(data);
$.get('/foo/bar?data=' + encodeURIComponent(json), callback);
Run Code Online (Sandbox Code Playgroud)
public class FooController : ApiController
{
[HttpGet, ActionName("bar")]
public void Bar(string data)
{
var request = JsonConvert.DeserializeObject<BarRequest>(data);
// use request.Category to process request
}
}
Run Code Online (Sandbox Code Playgroud)
这样我就不需要在客户端或服务器上触摸任何模型,验证器等.此外,每个其他解决方案都要求我在服务器或客户端更改命名约定.
| 归档时间: |
|
| 查看次数: |
13287 次 |
| 最近记录: |