以下是我的测试Web服务器上的WORKING(Windows 7上的IIS 7):
但完全相同的代码在两个生产Web服务器上都给出了以下404错误:
(Windows Server 2008上的IIS 7和Windows Server 2003上的IIS 6)
[守则]
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);
}
我在这里浏览了很多类似的问题,但没有找到答案 为什么相同的代码在一个Web服务器上工作而在其他Web服务器上不工作? 我需要在我的应用程序或IIS中配置一些特殊的东西吗? 我真的很困惑。任何帮助将不胜感激。
答案 0 :(得分:2)
不确定您是否仍然遇到此问题。 我能够通过将此添加到IIS服务器上的web.config来解决此问题。这来自here。原始答案来自here
我在web配置中启用了所有动词(verb =“*”)到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>
答案 1 :(得分: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}
);