2017-03-22 259 views
1

我有一個Controller稱爲api,以下MVC C#自定義路由

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

控制器內我有一個動作如下

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

return null只是測試了這一點,我m試圖得到它的斷點 但我得到的網址沒有找到,當試圖訪問像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從url –

+0

你的路由配置不是很好的params {id:guid}我 –

回答

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) { ... } 
} 

確保您的控制器和路線不衝突的Web API的路線,如果你把它包含在MVC項目。

+0

問題確實是'routes.MapMvcAttributeRoutes()'即將發佈它,由於某種原因,如果我希望它是一個GUID它不會工作,我不得不改變它,就好像我收到一個字符串,我不喜歡,因爲我不想要觸發該行動,如果沒有正確的Guid發送 –

+0

@ pato.llaguno,路徑約束添加到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。

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

或使用RoutePrefix屬性在控制器級別

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

現在它將會在以下網址

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

有相同的輸出,我得到'HTTP錯誤404.0 - 未找到「做了RoutePrefix控制器級 –

+0

它應該工作。我只是測試它。你確定你通過一個有效的Guid?你是否通過調用'routes.MapMvcAttributeRoutes();''在RouteConfig類的'RegisterRoutes'方法中啓用屬性路由? – Shyju