Asp.net

具有復雜對象的 MVC WebApi HttpGet

  • July 28, 2016

我有一個現有的 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
   }
}

這樣我就不需要在客戶端或伺服器上接觸任何模型、驗證器等。此外,所有其他解決方案都要求我更改伺服器或客戶端的命名約定。

引用自:https://stackoverflow.com/questions/15622852