2017-03-22 3 views
1

나는MVC C#을 사용자 정의 라우팅

[Route("fleet/{id:guid}/selectedfleet")] 
public ActionResult selectedfleet(Guid id) 
{ 
    return null; 
} 

return null, 나는 '이 테스트하는 그냥 다음과 같이 나는 액션이 ​​컨트롤러 내부

routes.MapRoute(
    name: "api", 
    url: "api/", 
    defaults: new { controller = "api" } 
); 

따라하는 Controllerapi라는이 그것에 대한 중단 점을 얻으려고 m,하지만 뭔가를 액세스하려고 할 때 URL을 찾을 수 없습니다. http://localhost:50593/api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet

+1

경로 정의에 'api'가 없습니다. 'http : // localhost : 50593/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet' – Shyju

+0

시도 @Shyju 나는 [Route ("api/fleet/{id : guid}/selectedfleet" ]'하지만 작동하지 않습니다 심지어 URL을 멀리 API를 복용하지 않습니다 –

+0

params {id : guid} i –

답변

1

먼저 작동 것이다 당신이 속성을 사용하려는 경우 MVC에서 라우팅을 사용하도록 설정합니다.

public class RouteConfig { 

    public static void RegisterRoutes(RouteCollection routes) { 

     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapMvcAttributeRoutes(); //<--IMPORTANT for attribute routing in MVC 

     // Convention-based routing. 

     //...other code removed for brevity 
    } 
} 

하면 컨트롤러가 요청을 일치하도록 정의 된 적절한 경로 템플릿을 가지고 있는지 확인해야 라우팅 속성을 통해 http://localhost:50593/api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet처럼 뭔가에 액세스하려고 할 때.

[RoutePrefix("api")] 
public class ApiController : Controller { 

    //GET api/fleet/2df3893d-c406-48fe-8443-1622ddc51af2/selectedfleet 
    [HttpGet] 
    [Route("fleet/{id:guid}/selectedfleet")] 
    public ActionResult selectedfleet(Guid id) { ... } 
} 

컨트롤러와 경로가 MVC 프로젝트에 포함되어있는 경우 웹 API 경로와 충돌하지 않는지 확인하십시오.

+0

문제는 실제로'routes.MapMvcAttributeRoutes()'가 게시하려했는데 어떤 이유로 작동하지 않는 guid가 될 것으로 기대한다면 어떤 이유로 문자열을받는 것처럼 변경해야했습니다. 적절한 Guid가 보내지지 않으면 해당 동작을 트리거하고 싶지 않기 때문에 좋아하지 않습니다. –

+0

@ pato.llaguno, Route 제약이 MVC 5에 추가되었습니다. https://blogs.msdn.microsoft.com/webdev/2013/10/17/attribute -routing-in-asp-net-mvc-5/# route-constraints – Nkosi

+0

@ pato.llaguno 위의 예제는 테스트 할 때 작동합니다. guid 라우트 제약 조건을 사용할 때 오류 메시지가 표시됩니까? – Nkosi

1

Route 속성에 정의한 라우팅 패턴에 "api"이라는 용어가 없습니다. 따라서 현재 경로 정의를 사용하면 아래 요청이 작동합니다.

yourSiteBaseUrl/fleet/2df3893d-c406-48fe-8443-1622ddc‌​51af2/selectedfleet 

또는 경로 정의에 api라는 용어를 추가 할 수 있습니다. 컨트롤러 수준에 RoutePrefix 속성을 사용하여

public class apiController : Controller 
{ 
    [Route("api/fleet/{id:guid}/selectedfleet")] 
    public ActionResult selectedfleet(Guid id) 
    { 
     return Content(id.ToString()); 
    } 
} 

또는 지금

[RoutePrefix("api")] 
public class apiController : Controller 
{ 
    [Route("fleet/{id:guid}/selectedfleet")] 
    public ActionResult selectedfleet(Guid id) 
    { 
     return Content(id.ToString()); 
    } 
} 

당신이 있는지 확인해야합니다 아래의 URL을

yourSiteBaseUrl/api/fleet/0a5bb04d-4247-4cf6-8f96-2ce49325b5a7/selectedfleet 
+0

같은 출력을 가지고 있는데, 나는'HTTP Error 404.0 - Not Found'라는 메시지가 컨트롤러 레벨 –

+0

에 RoutePrefix를 실행했음을 의미합니다. 방금 테스트 했어. 유효한 Guid를 전달하고 있습니까? 'routes.MapMvcAttributeRoutes();'를 호출하여 Attribute Routing을'RouteConfig' 클래스의'RegisterRoutes' 메소드에서 사용 가능하게 했습니까? – Shyju