2015-09-07 88 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動作。並且添加一個路由屬性應該只定義一個到該操作的路由。 –