我正在使用Web API 2,並在URL以正斜槓結尾時看到意外的路由行爲。我的Web API配置看起來像這樣。當URL以正斜槓結尾時發生意外的Web API路由
public void Configuration(IAppBuilder appBuilder)
{
HttpConfiguration webApiConfig = new HttpConfiguration();
webApiConfig.MapHttpAttributeRoutes();
webApiConfig.EnsureInitialized();
appBuilder.UseWebApi(webApiConfig);
}
在WebApp.Start()我通過的網址http://host:port/configuration
。
我有兩個路由設置。
[Route("~/")]
public object GetResourcesList()
{
return new List<string>() { "Resource 1", "Resource 2", "Resource n" };
}
[Route("~/{resourceName}")]
public object GetResource(string resourceName)
{
return "Resource " + resourceName;
}
如果我做一個GET請求http://host:port/configuration/
它調用GetResourceList()
預期。
如果我向http://host:port/configuration
(末尾沒有正斜槓)發出GET請求,它會調用GetResource()
並返回「資源配置」。我希望它能撥打電話GetResourceList()
。
爲什麼會在第二個例子中調用GetResource()
?爲什麼當WebApp.Start應該在http://host:port/configuration
而不是http://host:port
上偵聽時,它將通過配置作爲resourceName?
我也試過[Route("")]
和[Route("{resourceName}")]
分別爲GetResourceList()
和GetResource()
,看到了相同的行爲。
感謝您的幫助。
編輯
我也只是(在結尾加上一個斜線)試圖監聽http://host:port/configuration/
。行爲沒有差異。
這將引發ArgumentException「路由模板不能以‘/’或‘〜’字符開始,它不能包含一個路由前綴‘?’字符」。 使用代字符更像是最後一次嘗試。我確實嘗試了[Route(「」)],我認爲這與您的建議相當。 – 2014-12-03 00:51:39
@ r2_118答案還爲時過早。編輯 – joelmdev 2014-12-03 00:55:51