2015-06-24 131 views
0

我正在嘗試使用實體框架構建OData端點。路由工作正常。Json參數始終爲空

我在我的控制器中有一個post方法,post請求可以正確路由,但是即使我傳遞參數(使用Fiddler 4)它也會收到null參數。

我控制器的方法是:

[HttpPost,EnableQuery] 
    public IHttpActionResult GetConfig_Post(ODataQueryOptions<GetConfig_Result> options, ODataActionParameters parameter) 
     { ... } 

的ODataActionParameters參數始終是空的。

路由代碼:

public override string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup<string, HttpActionDescriptor> actionMap) 
     { 
      if (odataPath != null && odataPath.PathTemplate == "~/entityset/action") 
      { 
       var segment = odataPath.Segments.First() as EntitySetPathSegment; 
       string typeName = segment.EntitySetName; 
       if (controllerContext != null && (segment != null && controllerContext.Request.Method == HttpMethod.Post)) 
       { 
        if (typeName == "Config") 
        { 
         return "GetConfig_Post"; 
        } 
       } 
      } 

我找不到爲什麼下面的POST請求與空參數處理的原因。 [請求如在提琴手,HTTP版本設置爲1.1]

User-Agent: Fiddler 
Content-Type: application/json 
Host: localhost:52673 
Content-Length: 36 

Data: 
{"id":"21"} 

回答

0

由於正在使用的WebAPI和在請求主體相信你必須使用[FromBody]參數屬性傳遞數據。

更重要的是,我相信你只能在控制器的POST動作中使用一個參數。

+0

frombody與您認爲提交表單的位置相關。 –

+0

@AmitKumarGhosh - 不正確時,它在綁定來自Ajax POST請求的數據時也被廣泛使用。它仍然是HTTP POST。 – Kamo

+0

我在建立WebApi和使用$ .ajax的同時還沒有使用這個屬性。完美的作品。 –