Web API 405错误与$ http.post

时间:2015-02-06 20:33:08

标签: angularjs api asp.net-web-api

我使用$ http.post在POST请求中收到405错误。奇怪的是,我在我的应用程序的另一个区域使用$ http.post,它运行得很好。

我在客户端使用AngularJS,服务器端使用Web API。我已经发布了我能想到的所有相关信息(除了我的web.config)。我有什么非常明显的东西吗?


下面的

代码不起作用(抛出405)

这是我想要的api控制器方法:

    public async Task<IHttpActionResult> LinkLogin(string provider)
    {
        Account user = await _repo.FindByNameAsync(User.Identity.Name);

        if (user == null)
        {
            return BadRequest("User does not exist!");
        }

        return new ChallengeResult(provider, null, "auth/Manage/LinkLoginCallback", user.Id);
    }

以下是我试图在客户端点击它的方式:

var _linkLogin = function (provider) {
    $http.post(serviceBase + 'auth/Manage/LinkLogin', provider).then(function (response) {
        return response;
    });
};

以下代码是可行的代码

Api控制器功能有效:

    // POST auth/Authorization/Register
    [AllowAnonymous]
    [Route("Register")]
    public async Task<IHttpActionResult> Register(UserModel userModel)
    {
         if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

         IdentityResult result = await _repo.RegisterUser(userModel);

         IHttpActionResult errorResult = GetErrorResult(result);

         if (errorResult != null)
         {
             return errorResult;
         }

         return Ok();
    }

从客户端调用它:

var _saveRegistration = function (registration) {

    _logOut();

    return $http.post(serviceBase + 'auth/Authorization/register', registration).then(function (response) {
        return response;
    });

};

这是我的web api配置:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API routes  
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "AuthenticationApi",
            routeTemplate: "auth/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Routes.MapODataServiceRoute("ODataRoute", "api", GenerateEdmModel());

        var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
        jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    }

    private static IEdmModel GenerateEdmModel()
    {
        ODataConventionModelBuilder builder = new ODataConventionModelBuilder(); 

        return builder.GetEdmModel();
    }
}

现在我已尝试在网上发布了许多不同的解决方案但无效,以下是我尝试过的内容的链接:

Web api not supporting POST method

Web API Put Request generates an Http 405 Method Not Allowed error

http://blog.dontpaniclabs.com/post/2013/01/23/That-Pesky-Requested-Resource-Does-Not-Support-HTTP-Method-POST-Error-When-Using-MVC-Web-API

1 个答案:

答案 0 :(得分:2)

我讨厌回答我自己的问题。如果有其他人遇到这个问题,那是因为你试图将一个简单的字符串值发送到web api控制器。

我成功地使用了这个解决方案:http://jasonwatmore.com/post/2014/04/18/Post-a-simple-string-value-from-AngularJS-to-NET-Web-API.aspx

如果链接已死,您可以简单地将字符串值用双引号括起来,如下所示:

$http.post(Config.apiUrl + '/processfile', '"' + fileName + '"');