나는 다음과 같은 MVC 컨트롤러를 가지고 :MVC5 컨트롤러
나는이 두 가지 방법으로 액세스 할 수있게하려면[RoutePrefix("api/SystemCheck")]
public class SystemCheckController : ApiController
{
[HttpGet]
[Route("")]
[Route("EnvironmentValidate")]
[RequiresPrivilegeMVC((int)PrivilegeType.SystemCheck)]
public IEnumerable<EnvironmentValidation> Get()
{
return FilteredEnvironmentValidate();
}
:
- http://localhost/Perform/API/SystemCheck/EnvironmentValidate
- http://localhost/Perform/API/SystemCheck/
옵션 2를 사용하면 유효한 응답을 얻습니다. 내가 옵션 1을하려고 할 때 그러나, 나는 얻을 :
{ "메시지": "어떤 HTTP 자원은 일치를 찾을 수 없습니다 요청 URI 'http://localhost/Perform/API/SystemCheck/EnvironmentValidate'.", "MessageDetail": "조치는 발견되지 않았다 'EnvironmentValidate'이름과 일치하는 'SystemCheck'컨트롤러가 있어야합니다. " }
는 메소드 이름이 Get
라고하지만 경로가 "EnvironmentValidate"로 지정되어 있기 때문에 내 컨트롤러 액션을 찾는 아닌가? 내가 부족 무엇
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapHttpRoute(
name: "DefaultApiGet",
routeTemplate: "api/{controller}/{action}",
defaults: new { action = "Get" },
constraints: new { httpMethod = new HttpMethodConstraint("GET") }
);
어떤 아이디어 : 여기
내가 내 RouteConfig.cs를 구성하는 방법입니다? 당신이 WebApi 컨트롤러와 라우팅 MVC 속성을 사용하려고하는 것 같습니다
MVC 용 경로에 대한 지식이 많지 않습니다. 그러나 내가 추측해야만한다면 첫 번째 옵션은 Route 속성을 ""으로 설정했기 때문에가 아니라 RouteConfig에서 "Get"이 기본값으로 설정 되었기 때문에 작동하는 것입니다. 또한 MVC 컨트롤러를 API로 사용하려는 경우 WebAPI를 대신 사용하는 것이 좋습니다 (사용자가 알지 못하는 경우에 대비하여 좋은 이유가있을 수 있습니다) –
언제 MVC에서 라우트를 맵핑 할 때, 이것은 첫 번째 일치를 취하는데,이 경우에는 그의 속성 기반 라우팅이어야합니다. –
MVC 및 WebApi 구성 요소가 혼합되어있을 수 있습니다. ApiController는 WebApi 구조이므로 WebApi 특성 라우팅을 사용해야합니다. 각 네임 스페이스는 정확히 동일한 클래스를 정의하지만 서로간에 작동하지는 않습니다. https://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web-api-2 – Sunshine