2015-09-07 49 views
4

在我的ASP.NET中的5个工作,我在一些统一的控制概念相混淆。请告诉我我做错了什么。统一MVC控制器路由在Asp.Net 5

在ASP.NET 5相同的控制器用于MVC和的WebAPI具有高于网络API控制器定义的路由属性的唯一的差异。我的想法是,“路线”属性仅用于定义路线。但是有一些发生在顶部的定义“路由”属性是指定一个控制器为Web Api控制器。

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

app.UseMvc(routes => { 
      routes.MapRoute(
       name: "default", 
       template: "{controller=Home}/{action=Index}/{id?}"); 

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

在家庭控制器,有接受的WebAPI get请求“HTTPGET”的行动,但不能没有“路”属性被调用,但是对于网络API的路由已经在启动类中定义。

public class HomeController : Controller { 
    public IActionResult Index() { 
     return View(); 
    } 

    //[Route("api/[controller]")] 
    [HttpGet] 
    public IEnumerable<string> Get() { 
     return new string[] { "value1", "value2" }; 
    } 
} 

和价值控制器“关于”行动不能作为呼叫“/价值/约”将给出错误not found访问。并且“/ api/values/about”将重定向到“获取”操作。

[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”路径。 我在做什么错?

+0

对不起不存在的分歧,我无法找到你写什么的问题。请澄清一下吗? – Geerten

+0

我的问题是,我已经在startup.cs文件中指定了web api路由,但是我不能访问“/ api/home”路径 –

回答

0

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

因为控制器是统一的,您不必指定的WebAPI的路线,另一个用于MVC。

的MapWebApiRoute功能仅适用于具有对于上了年纪的WebAPI 2 ASP.NET编写的代码向后兼容性。

如果你想使用基于约定的路由,你可以离开UseMvc空这样的:

app.UseMvc(); 

有关不同选项的详尽的解释,请参阅本有用的博文:ASP.NET 5 Deep Dive: Routing

另见this question关于MVC和的WebAPI控制器之间的ASP.NET 5.

+0

谢谢,但这很混乱。路由模块不应该与mvc和web api控制器混合使用。两者都是非常不同的概念。只需添加一个“路由”属性不应将mvc操作转换为Web api。 –

+0

嗯,正如你提到的,MVC和的WebAPI在ASP.NET也见5.合并http://aspnetmvc.readthedocs.org/projects/mvc/en/latest/migration/migratingfromwebapi2.html。 – Geerten

+0

我认为,即使合并它们后,这两个API都应该得到支持,并且路由应该是单独的。添加像[HTTPGET]这样的注释应该添加web api动作。并且添加一个路由属性应该只定义一个到该操作的路由。 –