2012-06-23 47 views
8

我正在處理asp.net web api。我想設置爲我在Global.asax文件類似項目的默認路由,如何更改asp.net web api中的默認路由

localhost:45678/api/Products 

但我沒有找到類似的任意格式的ASP.NET MVC路徑模型,像

url: "{controller}/{action}/{id}", 
       defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 

它總是重定向我到主頁(HomeController)。請指導我。

+0

你說的「它總是重定向我的主頁」的意思。你的意思是說,當你導航到本地主機:45678/api /產品它重定向你或當你從Visual Studio運行你的項目時,你登陸的第一頁是你的主頁? –

+0

當我運行我的項目時,它將我重定向到主頁。 –

+0

我已經更新了我的回答以迴應您的評論。 –

回答

8

App_Start文件夾中檢查您的RouteConfig班。您應該看到可以更改的默認路由。

 routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

編輯

閱讀您的意見後,我覺得這個問題是不是與你的路線。我不知道爲什麼你要想要這樣做,但你只需要爲你的項目指定起始URL。右鍵單擊您的Web項目 - 單擊屬性 - 單擊Web選項卡 - 在開始操作下選擇開始URL並在框中輸入http://localhost:45678/api/Products。保存您的項目並重新運行。它應該從新的位置開始。

+0

我在global.asax'routes.MapHttpRoute( 名稱:「DefaultApi」, routeTemplate:「api/{controller}/{id}」, 默認值:new {controller =「Products」,id = RouteParameter.Optional} );'但它仍然重定向到主頁。我沒有在App_Start中找到RouteConfig類 –

+0

您是否有一個名爲「ProductsController」的控制器繼承自ApiController,並且您是否在此控制器上有一個「public IEnumerable Get()」方法? –

+0

是的,先生,我有'公衆IEnumerable GetAll() { 返回產品; }'productscontroller:ApiController –

4

這個問題可能是幾乎所有人都會遇到的常見錯誤。

這裏的事實是,無論您使用的框架如何,所有路由都會根據System.Web.Routing.RouteTable.Routes集合進行收集。因此,如果您在ASP.NET Web API路由之前放置ASP.NET MVC默認路由,則ASP.NET Web API路由將永遠不會被掃描,因爲MVC路由將匹配。

我認爲這是通過查看你迄今爲止提供的情況。如果情況並非如此,那麼可以將完整的解決方案上傳到某個地方,並且人們可以看到完整的視圖。

+0

所以我可以知道該怎麼辦? –

0

[編輯:我的答案是一樣的凱文]

你是說,當你運行從Visual Studio項目,它會打開一個瀏覽器項目主頁?

Web API項目模板包含一個MVC控制器和一個Web API控制器。

URI「http:// localhost:xxxx /」轉到MVC控制器,而「http:// localhost:xxx/api/products」轉到API控制器。

當您在Visual Studio中運行該項目時,它將默認導航到「http:// localhost:xxxx」。在正常操作中,客戶端會請求所需的任何URI。

您可以在Project Properties/Web/Start Action下更改Visual Studio設置。

1

其實如果我們能夠在properties-> web-> start location中設置默認路由。那麼global.asax文件中的路由表,自定義路由,RegisterRoutes的需求是什麼。我嘗試了這種方式

起初好像,

routes.MapHttpRoute(
    name: "Default Api", 
    routeTemplate: "api/{controller}/{id}", 
    defaults: new { id = RouteParameter.Optional } 
); 

現在我想讓localhost:xxxx/api/products作爲我的Web API則默認路由,

routes.MapHttpRoute(
    name: "DefaultApi", 
    routeTemplate: "api/Products/{id}", 
    defaults: new { controller = "Products", id = RouteParameter.Optional } 
); 

但是沒有用的結果。

+2

你可以改善你的問題,而不是發佈更新作爲答案?(SE不作爲論壇)謝謝 –

+1

萊安德羅是對的,這應該被編輯到原來的問題。建議刪除。 –

0

我認爲你已經圍繞解決方案跳舞,但只是錯過了標記。試試這個:

  1. 確保您呼叫GlobalConfiguration.Configure(WebApiConfig.Register);在你的Global.asax.cs中。

  2. WebApiConfig.Register()設置爲默認路由:

    routes.MapHttpRoute(名: 「DefaultApi」, routeTemplate: 「API/{控制器} /(編號)」,缺省值:新的{控制器= 「Products」,id = RouteParameter.Optional});

  3. 在Web項目設置確保您有 「起始URL」 屬性設置爲:

    本地主機:45678

好運。

0

使用管理員權限重新啓動VS爲我解決了這個問題。 環境信息: - 操作系統:Windows 10(64位) - 視覺工作室:2017年