Asp.net
具有復雜對象的 MVC WebApi HttpGet
我有一個現有的 WebApi 操作,我想從 HttpPost 切換到 HttpGet。它目前將單個複雜對像作為參數。
該模型:
public class BarRequest { [JsonProperty("catid")] public int CategoryId { get; set; } }控制器:
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 } }這樣我就不需要在客戶端或伺服器上接觸任何模型、驗證器等。此外,所有其他解決方案都要求我更改伺服器或客戶端的命名約定。