2015-02-07 75 views
0

我創建了一個新的Web API項目,並創建以下路由規範(其實我已經簡化,尋找BUG):網絡API的路由只允許一個控制器

// Web API configuration and services 
    config.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{action}/{id}" 
    ); 

當我通過與阿賈克斯打個電話路線:

/api/account/GetSUID/0 

一切工作正常。當我只是用不同的控制器:

/api/tile/GetTileSet/0 

它返回200狀態,但不是打我的控制器,它只是返回jqXHR.responseText的默認頁內容!就好像它正在跳過像我請求默認站點頁面的任何API路由。

我對此感到莫名其妙,因爲我在過去幾年中在其他幾個項目中已經寫了數百個Web API函數。我從來沒有任何問題調用多個控制器。我對這裏可能發生的事情看得很高,希望有人在這裏可能有一個想法。

這裏是控制器上的樣品的方法:

[HttpGet] 
    public HttpResponseMessage CheckRequestedID(int id, [FromUri]string Search) 
    { 
     if (!BSDIUtil.HasAllAcceptableCharacters(Search)) 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     if (FolderModel.IDAlreadyExists(DAL, Search)) // We can check this because this function is only called when staff members are creating accounts for other people (participants always use their email). 
      return Request.CreateResponse(HttpStatusCode.OK, false); 
     else 
      return Request.CreateResponse(HttpStatusCode.OK, true); 
    } 

這將如果帳戶控制器上而不是瓷磚控制器上工作。其他

有一兩件事,我使用Visual Studio和Windows 8.1

+0

也許你的瀏覽器緩存了響應......如果你使用jQuery發送AJAX請求,你可以嘗試設置'cache:false'選項。 – nemesv 2015-02-07 21:18:34

+0

你可以分享你的動作方法(包括任何屬性)的定義嗎?我假設你已經驗證了請求實際上到了正確的URL(即,這不是客戶端問題)? – 2015-02-07 21:19:15

+0

nemesv - 當我將控制器切換到「帳戶」時,調用成功,因此它不能成爲緩存問題。螞蟻 - 會做的。這些調用都是相對的,如果我更改默認文檔,則返回新的默認值。 – 2015-02-07 21:33:21

回答

0

的「社區」版這是不是很可能經常會出現問題,但我已經解決了它,想我會在這裏發佈的任何人都有同樣的問題。

我在一個標準的web表單應用程序的上下文中使用web api(儘管我只爲我的報表頁面使用webforms)。在Web窗體應用程序的web.config中,您可以聲明用戶在進行身份驗證之前訪問的路徑。我只是提供訪問帳戶控制器的權限:由於我的身份驗證機制,所有其他人都不被允許。一旦我進行身份驗證(例如表單身份驗證調用),或者如果我將位置路徑更改爲僅包含「api」,問題就會消失。

0

我面臨同樣的問題,但在不同的背景下。有很多控制器和相應的路由模板。只有一個控制器響應請求。 後來我意識到我的其他控制器類不是大衆