我有一个 ASP.NET Web 应用程序项目,我实现了 WebApi 控制器,现在继续使用 MVC 控制器。
我添加了一个新的 MVC 控制器(例如“测试”)并选择使用“空读写操作”添加它。
控制器是使用各种 CRUD 方法创建的,但是该Index
操作的行为异常。
默认情况下,该Index
操作不接受任何参数:
public ActionResult Index()
{
return View();
}
现在,如果我尝试使用 url " /Test/Index
" 调用此方法,则不会调用该方法。
但是,如果我输入 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
设置为可选,我的理解是不应该要求我在 Index 方法中提供参数值?
我创建了另一个项目并检查了这种行为,它工作正常。
那么想知道这个项目中的什么使 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:
在这种情况下的问题是我不能(或者我可以?)在 web api 路由中添加前缀 api,因为第三方设备正在使用固定的 url 发送 GET 和 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 控制器。
在这种情况下,理想的方法应该是什么?