在我使用ASP.NET 5的过程中,我对一些统一控制器的概念感到困惑。请告诉我我哪里做错了。
在MVC 5中,WebApi和MVC使用相同的控制器,只是在WebApi控制器上面定义了路由属性的区别。我的想法是" route“属性仅用于定义路由。但是已经出现了在顶部定义"Route“属性是将控制器指定为Web Api控制器的情况。
在Startup.cs中,我有以下路由配置。
app.UseMvc(routes => {
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
routes.MapWebApiRoute(
"DefaultApi",
"api/{controller}/{id?}");
});在主控制器中,有用于接受WebApi路由请求的"HttpGet“操作,但是如果没有”get“属性就不能调用它,但是web api的路由已经在启动类中定义了。
public class HomeController : Controller {
public IActionResult Index() {
return View();
}
//[Route("api/[controller]")]
[HttpGet]
public IEnumerable<string> Get() {
return new string[] { "value1", "value2" };
}
}在Values控制器中,无法访问"About“操作,因为对"/values/about”的调用将给出一个错误not found。和"/api/values/about“将重定向到"Get”操作。
[Route("api/[controller]")]
public class ValuesController : Controller {
public IActionResult About() {
ViewData["Message"] = "Your application description page.";
return View();
}
// GET: api/values
[HttpGet]
public IEnumerable<string> Get() {
return new string[] { "value1", "value2" };
}
}但是,尽管我已经在startup.cs文件中指定了web api路由,但我无法访问"/api/home“路径。我做错了什么?
发布于 2016-01-22 20:44:16
我相信你混合了不同的路由方法。
因为控制器是统一的,所以您不必为webapi指定一个路由,而为MVC指定另一个路由。
MapWebApiRoute函数仅用于向后兼容为旧版WebApi 2 ASP.NET编写的代码。
如果您想使用基于约定的路由,只需将UseMvc留空,如下所示:
app.UseMvc();有关不同选项的详细解释,请参阅这篇有用的博客文章:ASP.NET 5 Deep Dive: Routing。
另请参阅this question,了解ASP.NET 5中MVC和WebApi控制器之间不存在的差异。
https://stackoverflow.com/questions/32442877
复制相似问题