2015-11-04 91 views
0

查詢字符串JSON我如何能實現使用asp.net的WebAPI 2路由屬性下面的路由方案asp.net的WebAPI 2路由與路由參數

http://localhost/vitualdir/prefix/{id}/methodname?{encoded json defenition of object} 

? 我的建議是:

首先:加[RoutePrefix("prefix")]到控制器

其次:實施以下defenition:

[Route("~/{id}/methodname")] 
    [HttpGet] 
    public async Task<IHttpActionResult> methodname([FromUri] JsonObjectFromUri object, int id) 
    { 

但是,代碼不工作,我想。你能幫我嗎?

回答

1

「動作」中指定的路由中的'〜'覆蓋路由前綴。

請嘗試刪除它。它應該工作。

參考http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2#prefixes

如。

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Net.Http; 
using System.Web.Http; 
using System.Web.Routing; 

namespace MvcApplication2.Controllers 
{ 
    public class TestClass 
    { 
     public string Name { get; set; } 
     public int Age { get; set; } 
    } 

    [RoutePrefix("prefix")] 
    public class ValuesController : ApiController 
    { 
     // GET api/values 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2" }; 
     } 

     // GET api/values/5 
     [Route("{id}/methodname")] 
     public string Get(int id, [FromUri] TestClass objectFromUri) 
     { 
      return "value"; 
     } 

     // POST api/values 
     public void Post([FromBody]string value) 
     { 
     } 

     // PUT api/values/5 
     public void Put(int id, [FromBody]string value) 
     { 
     } 

     // DELETE api/values/5 
     public void Delete(int id) 
     { 
     } 
    } 
} 

現在,如果您通過屬性的識別TestClass作爲URL參數,將的WebAPI自動將它們綁定到objectFromUri對象。

http://localhost:39200/prefix/1/methodname?name=ram&age=10

+0

我明白了,謝謝,但我怎麼可以從查詢字符串JSON對象? –

+0

我編輯了答案。希望澄清。 – rmchndrng