我有一個ASP.NET Web應用程序項目,我實現了一個WebApi控制器,現在繼續使用MVC控制器。未使用默認設置調用控制器操作「索引」
我添加了一個新的MVC控制器(例如「Test」),並選擇添加它爲「空讀寫操作」。
控制器是使用各種CRUD方法創建的,但Index
操作意外行爲。
默認情況下,Index
動作不帶任何參數:如果我嘗試調用使用URL「/Test/Index
」這種方法
public ActionResult Index()
{
return View();
}
現在,該方法不會被調用。
但是,如果我輸入url「/Test/Index/1
」Index
行動運行。
在我看來,它涉及到的路由,所以我檢查了RouteConfig
類的樣子:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
Id
設置爲可選的,我的理解是,我不應該被要求在提供的參數值索引方法?
我創建了另一個項目,並檢查了這種行爲,它工作正常。
想知道在這個項目中,MVC控制器的行爲有什麼不同?
混合WebApi控制器與MVC控制器有一些副作用(使它成爲一種特殊情況)?
讓我知道你是否需要任何信息來回答這個問題。
更新:
我做了修改WebApiConfig製作API控制工作,按照我的要求,它看起來像這樣:
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}",
defaults: new { controller = "iclock", action = "cdata" }
);
}
我不明白爲什麼它會影響MVC控制器路線?我現在提供了答案。
更新2:
在這種情況下的問題是我不能(或可以嗎?)的作爲第三方設備網絡API的路由前綴API被髮送GET和使用固定的URL POST請求,如下:
GET /iclock/cdata?SN=xxxxxx&options=all&pushver=2.0.2&language=XX
GET /iclock/cdata?SN=xxxxxx&type=time
POST /iclock/cdata?SN=123456&table=ATTLOG&Stamp=2011-04-05T17:40:20
我實現了以上請求處理功能,使WebApiConfig路由的變化。現在需要一個前端UI,我正在開發一個帶有CRUD操作的MVC控制器。
在這種情況下什麼應該是理想的方法?
除非web api控制器在相同的路徑上監聽,否則它應該不會影響你的mvc控制器。 –