2013-09-26 93 views
1

以下是工作在我的測試Web服務器上(在Windows 7 IIS 7):ASP.NET Web窗體的Web API的jQuery - 404錯誤

enter image description here

但完全相同的代碼給我下面的404錯誤既生產Web服務器上:
(IIS 7的Windows Server 2008和IIS 6在Windows Server 2003)

enter image description here

[守則]

Global.asax中路由設置:

protected void Application_Start(object sender, EventArgs e) 
    { 
     RouteTable.Routes.MapHttpRoute(
     name: "DefaultApi", 
     routeTemplate: "api/{controller}/{deptId}/{member}", 
     defaults: new { deptId = RouteParameter.Optional, member = RouteParameter.Optional}   
     ); 
    } 

Page.aspx jQuery的聲明:

$.ajax(
    { 
     url: "api/Department/" + '<%= Request.QueryString["deptId"] %>', 
     contentType: "application/json", 
     dataType: "json", 
     success: function (data) { 
      alert('hello'); 
     } 
    }); 

DepartmentController.cs GET方法:

[HttpGet] 
public Department GetDepartment(int deptId) 
{ 
    var deptRepo = new DepartmentRepository(); 
    return deptRepo.GetDepartment(deptId); 
} 

我瀏覽類似的很多在這裏的問題,但沒有找到答案。
爲什麼相同的代碼可以在一臺網絡服務器上工作,但不能在其他網絡服務器上工作?
在我的應用程序或IIS中需要配置什麼特別的東西嗎?
我對此很感興趣。任何幫助將不勝感激。

+0

可能聽起來很愚蠢,但是我們得檢查一下......看起來您正在瀏覽此網址的httpS版本。如果你轉到類似於測試Web服務器屏幕截圖的常規http,它仍然是404嗎? – ethorn10

+0

@ ethorn10感謝您的評論。我無法導航到生產Web服務器上的http。但是,我有另一個測試Web服務器,並且代碼也在http上失敗。如果https是問題,我可以做些什麼來解決這個問題? – Baxter

+0

我懷疑https是你的問題。通常情況下,路由在其中定義了一個'action',我沒有看到一個給你,所以我不太確定這在本地是如何工作的......也許是一個Web API的東西,我還沒有意識到。 – ethorn10

回答

2

不知道你是否仍然有這個問題。 我能夠通過將此添加到IIS服務器上的web.config來解決此問題。這來自here。原始答案從here

我在我的web配置中啓用了ExtensionlessUrlHandler-Integrated-4.0處理程序的所有動詞(動詞=「*」)。

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <modules runAllManagedModulesForAllRequests="true" /> 
     <handlers> 
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" /> 
     </handlers> 

+0

儘管這個鏈接可能回答這個問題,但最好在這裏包含答案的重要部分,並提供供參考的鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – godel9

+0

第一次在stackoverflow上回答。謝謝你的建議。從鏈接的答案中添加了決議的基本要素,因此如果鏈接中斷,答案仍然存在。 – James

+0

謝謝。在未來找到答案的人肯定會很感激。 :-) – godel9

1

這是一個有點晚了一個答案,但我認爲這可能幫助其他人在類似的情況。

將另一個路由規則添加到您的RouteTable應清除這個找不到的錯誤。此路由規則應以生產服務器路徑中提到的第一個文件夾名稱開頭,即在提到第二條規則時以forms開頭,而不是api。讓原來的規則在那裏,因爲你可以在RouteTable中有多個規則。另外,不要改變原來使用的jQuery的路徑,因爲在jQuery url中使用'api/...'時會自動附加'forms'。

請確保您不要將「DefaultApi」的名稱給這個新規則,因爲已經有一個名爲'DefaultApi'的規則,這將導致編譯時錯誤。

RouteTable.Routes.MapHttpRoute(
    name: "Rule1Api", 
    routeTemplate: "forms/api/{controller}/{deptId}/{member}", 
    defaults: new { deptId = RouteParameter.Optional, member = RouteParameter.Optional}   
    );