首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Asp.Net 5中的统一管理虚电路控制器路由

Asp.Net 5中的统一管理虚电路控制器路由
EN

Stack Overflow用户
提问于 2015-09-08 00:29:46
回答 1查看 557关注 0票数 4

在我使用ASP.NET 5的过程中,我对一些统一控制器的概念感到困惑。请告诉我我哪里做错了。

在MVC 5中,WebApi和MVC使用相同的控制器,只是在WebApi控制器上面定义了路由属性的区别。我的想法是" route“属性仅用于定义路由。但是已经出现了在顶部定义"Route“属性是将控制器指定为Web Api控制器的情况。

在Startup.cs中,我有以下路由配置。

代码语言:javascript
复制
app.UseMvc(routes => {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");

            routes.MapWebApiRoute(
                "DefaultApi",
                "api/{controller}/{id?}");
        });

在主控制器中,有用于接受WebApi路由请求的"HttpGet“操作,但是如果没有”get“属性就不能调用它,但是web api的路由已经在启动类中定义了。

代码语言:javascript
复制
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”操作。

代码语言:javascript
复制
[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“路径。我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2016-01-22 20:44:16

我相信你混合了不同的路由方法。

因为控制器是统一的,所以您不必为webapi指定一个路由,而为MVC指定另一个路由。

MapWebApiRoute函数仅用于向后兼容为旧版WebApi 2 ASP.NET编写的代码。

如果您想使用基于约定的路由,只需将UseMvc留空,如下所示:

代码语言:javascript
复制
app.UseMvc();

有关不同选项的详细解释,请参阅这篇有用的博客文章:ASP.NET 5 Deep Dive: Routing

另请参阅this question,了解ASP.NET 5中MVC和WebApi控制器之间不存在的差异。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32442877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档