1

以下是在我的测试 Web 服务器(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 服务器上运行,但不能在其他服务器上运行?
我需要在我的应用程序或 IIS 中配置什么特别的东西吗?
我真的坚持这一点。任何帮助将不胜感激。

4

2 回答 2

2

不确定您是否仍然遇到此问题。我可以通过将其添加到 IIS 服务器上的 web.config 来解决此问题。这来自这里。原来的答案是从这里找到的

我在我的 Web 配置中为 ExtensionlessUrlHandler-Integrated-4.0 处理程序启用了所有动词 (verb="*")。

<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>

于 2013-12-12T15:42:11.847 回答
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}           
    );
于 2014-10-27T16:48:14.180 回答