我正在創建一個WebApi2服務,並且我想要實現的方法之一代表來自內部樹結構內的對象的HTTP GET - 因此請求將沿着行:Catch-all路由無法找到WebApi2的路由ApiController
GET /values/path/path/to/object/in/tree
所以我想我的方法來接收「路徑/到/對象/在/樹」。
但是,當我運行這個程序時,我剛剛得到了一個404,而且有趣的是,我得到了一個與標準IIS 404不同的404.它的標題爲'服務器錯誤'/'應用程序',而一個對於完全無效的資源標題爲「HTTP錯誤404.0 - 未找到」。
我在玩默認模板來試試看看我能否得到這個工作,因此相似性。
我必須爲我的RouteConfig
public static void RegisterRoutes(RouteCollection routes)
{
var route = routes.MapRoute(
name: "CatchAllRoute",
url: "values/path/{*pathValue}",
defaults: new { controller = "Values", action = "GetPath" });
}
這是我ValuesController
:
[System.Web.Mvc.AuthorizeAttribute]
[RoutePrefix("values")]
public class ValuesController : ApiController
{
[Route("test/{value}")]
[HttpGet]
public string Test(string value)
{
return value;
}
[HttpGet]
public string GetPath(string pathValue)
{
return pathValue;
}
}
有趣的是,如果我從Controller
,而不是ApiController
它的工作原理確定,但隨後的通常屬性路由派生不起作用。
我嘗試遵循this post (http://www.tugberkugurlu.com/archive/asp-net-web-api-catch-all-route-parameter-binding)中的方法,但我無法讓它工作。
我確定我錯過了一些愚蠢的事情,但花了幾個小時,我認爲謹慎的問我做錯了什麼。
感謝
中號
你記得做'config.MapHttpAttributeRoutes();'註冊屬性路由嗎? – crunchy