JQuery删除对C#API的请求->;HTTP状态代码405

JQuery删除对C#API的请求->;HTTP状态代码405,c#,asp.net-web-api,C#,Asp.net Web Api,我在一台服务器上有一个用C#编写的WebApi,在另一台服务器上有一个试图使用JQuery发送删除请求的网页: <script> $(function () { $("#Save").click(function () { $.ajax({ type: "DELETE", url: "https://chad-test4.clas.uconn.edu/api/Employees/1", d

我在一台服务器上有一个用C#编写的WebApi,在另一台服务器上有一个试图使用JQuery发送删除请求的网页:

<script>
$(function () {
    $("#Save").click(function () {
        $.ajax({
            type: "DELETE",
            url: "https://chad-test4.clas.uconn.edu/api/Employees/1",
            dataType: "json",
            success: function (data) {
                console.log("Response recieved");
                console.log("Success: " + JSON.stringify(data));

            },

            error: function() {
                console.log("Failed")
            }

          //  data: {"id": 1 }
        });
    });
});
</script>
我在控制台中收到的响应是:

XMLHttpRequest cannot load https://chad-test4.clas.uconn.edu/api/Employees/1. 
Invalid HTTP status code 405
create.htm:41 Failed
在对该主题进行研究之后,我将Web.Config标题更改为建议的文本:

<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
  <remove name="FormsAuthentication" />
</modules>
<httpProtocol>
  <customHeaders>
    <clear />
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE,   OPTIONS" />
  </customHeaders>
</httpProtocol>


我仍然得到同样的回应。任何建议都将受到欢迎,405代码与“HTPP错误请求”相关,这是REST API的错误,否,jQuery

我向您推荐以下技巧:


我建议您将问题移至C#tag。

它与“HTPP坏请求”相关的405代码,这是REST API的错误,否,jQuery

我向您推荐以下技巧:


我建议您将问题移至C#标记。

HTTP 405状态代码不是“错误请求”,而是“不允许使用方法”

在WebApiConfig.cs文件中,为控制器配置的路由应在“操作”属性中指定控制器将接受的HTTP谓词。确保javascript中的type:设置为路由操作中匹配的HTTP谓词

控制器中的方法可能还应该具有一个描述it服务动词的属性,例如[HttpPost]或[HttpDelete]

例如,这里是一个小Api的路由配置

public static class WebApiConfig
{
    /// <summary>
    /// Registers the WebAPI routes.
    /// </summary>
    /// <param name="config">The configuration.</param>
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "SOAInboundApi",
            routeTemplate: "api/{controller}",
            defaults: new { controller = "SOAInbound", action = "Post", id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "LogFileApi",
            routeTemplate: "api/{controller}",
            defaults: new { controller = "LogFile", action = "Get", id = RouteParameter.Optional }
        );
    }
}
公共静态类WebApiConfig
{
/// 
///注册WebAPI路由。
/// 
///配置。
公共静态无效寄存器(HttpConfiguration配置)
{
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
名称:“SOAInboundApi”,
routeTemplate:“api/{controller}”,
默认值:new{controller=“SOAInbound”,action=“Post”,id=RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
名称:“LogFileApi”,
routeTemplate:“api/{controller}”,
默认值:新建{controller=“LogFile”,action=“Get”,id=RouteParameter.Optional}
);
}
}

我有一个默认设置,它只是显示一个静态视图,解释如何使用我的Api,一个接受HTTP Post的SOAInbound,以及一个接受HTTP Get的日志文件。

HTTP 405状态代码不是“错误请求”,而是“不允许使用方法”

在WebApiConfig.cs文件中,为控制器配置的路由应在“操作”属性中指定控制器将接受的HTTP谓词。确保javascript中的type:设置为路由操作中匹配的HTTP谓词

控制器中的方法可能还应该具有一个描述it服务动词的属性,例如[HttpPost]或[HttpDelete]

例如,这里是一个小Api的路由配置

public static class WebApiConfig
{
    /// <summary>
    /// Registers the WebAPI routes.
    /// </summary>
    /// <param name="config">The configuration.</param>
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "SOAInboundApi",
            routeTemplate: "api/{controller}",
            defaults: new { controller = "SOAInbound", action = "Post", id = RouteParameter.Optional }
        );

        config.Routes.MapHttpRoute(
            name: "LogFileApi",
            routeTemplate: "api/{controller}",
            defaults: new { controller = "LogFile", action = "Get", id = RouteParameter.Optional }
        );
    }
}
公共静态类WebApiConfig
{
/// 
///注册WebAPI路由。
/// 
///配置。
公共静态无效寄存器(HttpConfiguration配置)
{
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
名称:“SOAInboundApi”,
routeTemplate:“api/{controller}”,
默认值:new{controller=“SOAInbound”,action=“Post”,id=RouteParameter.Optional}
);
config.Routes.MapHttpRoute(
名称:“LogFileApi”,
routeTemplate:“api/{controller}”,
默认值:新建{controller=“LogFile”,action=“Get”,id=RouteParameter.Optional}
);
}
}

我有一个默认设置,它只是显示了一个静态视图来解释如何使用我的Api,一个接受HTTP Post的SOAInbound和一个接受HTTP Get的日志文件。

所以在这里?:config.Routes.maphttroute(名称:“DefaultApi”,routeTemplate:“Api/{controller}/{id}”,默认设置:new{id=RouteParameter.Optional});我不确定要在这里更改什么,以便将action属性添加到new,例如new={controler=“NameofYourController”,action=“Delete”,id=RouteParameter.Optional}然后我是否需要将控制器从HttpResponseMessage更改为ActionResult?我认为这不会有什么区别,因为您没有使用返回值。因此,在这里?:config.Routes.MapHttpRoute(名称:“DefaultApi”,routeTemplate:“api/{controller}/{id}”,默认值:new{id=RouteParameter.Optional});我不确定要在这里更改什么,以便将action属性添加到new,例如new={controler=“NameofYourController”,action=“Delete”,id=RouteParameter.Optional}然后我是否需要将控制器从HttpResponseMessage更改为ActionResult?我认为这不会有什么区别,因为您没有使用返回值。