2016-01-21 67 views
1

我有2個控制器,1是MVC,1是Web Api 2. 後者似乎工作正常,但第一個無法顯示HTML只有當我寫完整地址時纔會顯示頁面。ASP MVC 5和Web Api 2無法在完整鏈接上查看頁面

這是我簡單RouteConfig.cs

routes.MapRoute(
    name: "Default", 
     url: "{controller}/{action}", 
     defaults: new { 
      controller = "Base", 
      action = "Main" 
     } 
    ); 
) 

讓我們默認爲例子,所以控制器Base和行動是Main,代碼簡單

public ActionResult Main() { 
    return View(); 
} 

http://localhost/miApps - >工作和顯示器內容/ View/Base/Main http://localhost/miApps/Base - >工作和顯示內容/ View/Base/Main http://localhost/miApps/Base/Main - > d oesn't工作,該錯誤是

{「消息」:「沒有HTTP資源發現匹配的請求URI‘http://localhost/miApps/Base/Main’。」,「MessageDetail」:「否類型發現命名控制器匹配'基地'。「}


我也張貼WebApiConfig.cs,也許有一個互動?

config.MapHttpAttributeRoutes(); 
    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "{controller}/{action}", 
     defaults: new { 
      //id = RouteParameter.Optional 
     } 
    ); 
} 
+0

該URL您在錯誤中提到的和你貼什麼不工作不一樣。你能用正確的細節更新問題嗎? – ramiramilu

+0

調整後感謝您 – Naigel

+0

更改您的路線爲 - 'url:「miApps/{controller}/{action}」'爲您的'默認'路線,並讓我知道它是否有效。 – ramiramilu

回答

2

爲了與普通控制器區分開來,API控制器的路由應該有一個前綴(通常是'/ api /')。

嘗試更新WebApiConfig.cs這樣:

config.MapHttpAttributeRoutes(); 
    config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html")); 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}", 
     defaults: new { 
      //id = RouteParameter.Optional 
     } 
    ); 
} 
+0

這似乎是唯一可行的方法。我在Api控制器中添加了一個前綴,然後添加了一個'Route'裝飾,刪除了前綴的需要,所以在'WebApiConfig.cs'中我改成了'routeTemplate:「API/{controller}/{action}」',然後在名爲'GetName'的action中名爲'Rest'的控制器中添加了屬性'[Route(「Rest/GetName/{name?}」)]''。這不是很實際,我希望有更好的解決方案 – Naigel

+0

你可以在你的API控制器上使用'[RoutePrefix]'屬性,然後在操作方法上只使用參數'[Route]'。例如'[Route(「{name}」)]'[link](http://www.asp.net/web-api/overview/web-api-routing-and-actions/attribute-routing-in-web- API-2) – Vahid