CATCH-ALL 경로는 WEBAPI2 APICONTRLLER로 경로를 찾지 못합니다.
-
21-12-2019 - |
문제
i WebApi2 서비스를 작성하고 구현하려는 방법 중 하나는 내부 트리 구조 내의 객체에서 HTTP 가져 오기를 나타냅니다. 따라서 요청은 다음 줄을 함께합니다.
GET /values/path/path/to/object/in/tree
.
그래서 내 방법이 "PATH / to / object / in / tree"를받을 수 있습니다.
그러나 나는 이것을 실행할 때 404를 얻습니다. 표준 IIS 404를 찾고있는 404를 얻는 것은 흥미 롭습니다. '서버 오류'/ '응용 프로그램'이라는 메시지가 표시됩니다. 완전히 잘못된 리소스는 'HTTP ERROR 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;
}
}
.
@
감사합니다
m
해결책
Web API 라우팅은 MVC 라우팅과 동일하지 않습니다.
대신에route.MapRoute
.
시도
public static void Register(HttpConfiguration config) {
config.MapHttpAttributeRoutes
config.Routes.MapHttpRoute(
name: "CatchAll", routeTemplate: "values/path/{*pathvalue}",
defaults: new {id = RouteParameter.Optional });
}
.
컨트롤러에서 작동하는 이유는 MapRoute가 MVC 컨트롤러 라우팅을위한 올바른 형식이며 MaphtTProute는 API 컨트롤러 용으로 설계되었습니다.