2012-10-10 44 views
1

我有一個MVC Web API get方法,我希望能夠傳遞一個可爲空的Guid作爲參數。如果我用「?id = null」設置GET,我會得到400響應。我可以通過一個空指導,但我寧願不這樣做。具有可空的Guid的Web Api GET方法可能嗎?

無論我將URI更改爲「id =,id = null等」,它都不會接受null。有誰知道如何使這項工作?

[HttpGet] 
    public User Get(Guid? Id) 

更新路由配置

config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{action}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 

全部HTTP GET簽名的sourceID是ID喜歡傳爲空帕拉姆。

[HttpGet] 
    public IEnumerable<ActionItemsListViewModel> GetPagedList(int skip, int take, int page, int pageSize, [FromUri]List<GridSortInfo> sort, [FromUri] ActionItem.ActionItemStatusTypes? actionItemStatus, Guid? sourceId) 

發現問題,此過濾器說模型狀態是無效的。

public class ApiValidationActionFilter : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext) 
    { 
     if (!actionContext.ModelState.IsValid) 
     { 
      var errors = actionContext.ModelState 
       .Where(e => e.Value.Errors.Count > 0) 
       .Select(e => e.Value.Errors.First().ErrorMessage).ToList(); 

      actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.BadRequest, string.Join(" ", errors)); 
     } 
    } 
} 
+0

你儘量不要傳遞什麼? – MuriloKunze

+0

@murilokunze是的,這確實有效,不幸的是,我用api控制不允許排除參數。 – NullReference

回答

1

我能傳遞null的GUID?當我使用

  • 查詢字符串參數:API /值ID = NULL
  • 路線參數:API /值/空

控制器:

public class ValuesController : ApiController 
{ 
    public User Get(Guid? Id) 
    { ... } 
} 
+0

感謝您的迴應。我試過查詢字符串中的?id = null,我回來了「null'對Nullable'1無效。」你能解釋一下「route parameter:api/values/null」是什麼意思嗎? – NullReference

+0

當你做這件事時,我無法重現你的問題?id = null。你的ApiController看起來像我的repro ValuesController嗎? –

+0

對於路由參數,我使用 「DefaultApi」路由(使用routeTemaplte「api/{controller}/{id})將{id}映射爲null,當執行此操作時:api/values/null。(此默認路由在WebApiConfig.Register(...)中定義) –

3

嘗試使用:

[HttpGet] 
public User Get(Guid? Id = null) 
+0

如果您使用基於屬性的路由嘗試: [路由(「{id?}」)]] public User Get(Guid?Id = null) – sree

相關問題