2012-08-30 29 views
0

升级的RC到RTM网页API项目RTM的Web API从RC路由错误与模型结合

默认参数为简单类型参数绑定现在[FromUri]:在ASP.NET的Web API的早期版本简单类型参数的默认参数绑定使用模型绑定。简单类型参数的默认参数绑定现在是[FromUri]。

我相信是导致我greif的变化。

现在我不太确定。 StrathWeb似乎使我的事情,它应该就这样工作。

鉴于此端点

[HttpGet] 
    public HttpResponseMessage Method(string a, string b) 
    { 
    ... 
    } 

我使用

@Url.RouteUrl("route", new { httproute = "", controller = "Controller", version = "1" })"> 

让它产生该路由的URL在客户端上生成一个URL。

routes.MapHttpRoute(
name: "route", 
routeTemplate: "api/v{version}/{controller}/Method", 
defaults: new 
{ 
    action = "Method", 
    controller = "Controller", 
    version = "1" 
}); 

它创建的网址罚款。该网址看起来像

.../api/v1/Controller/Method?optional=z 
.../api/v1/Controller/Method?a=x&b=y&optional=z 

它会在请求时抛出404。如果我删除api控制器中的参数a和b,那么它就可以进入方法了。

什么是使这些绑定的正确方法?

回答

3

,如果你需要 'A' 和 'b' 是可选的,那么你就需要让他们的可选参数:

公共HttpResponseMessage方法(字符串= NULL,串B = NULL

+0

我以前试过,它没有工作。自从现在开始工作以来,我一定把事情搞砸了。 – Steve

+0

在路由中,您可以将a和b设置为默认部分中的'UrlParameter.Optional'。我认为你不需要在方法中使用'string a = null',因为'string'默认是可以为空的类型? – CallumVass

+0

你可以做UrlParameter.Optional'如果'参数来自路线。如果它们来自querystring,我们需要说“string a = null”,尽管它是一个可为空的类型......这是从RC行为的变化.. –