网络 API 405 错误 $http.post
Web API 405 Error with $http.post
我在使用 $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;
});
};
这是我的网站 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 控制器。
我成功地使用了这个解决方案:http://jasonwatmore.com/post/2014/04/18/Post-a-simple-string-value-from-AngularJS-to-NET-Web-API.aspx
如果 link 已死,您只需将字符串值用双引号括在 POST 请求中,如下所示:
$http.post(Config.apiUrl + '/processfile', '"' + fileName + '"');
我在使用 $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;
});
};
这是我的网站 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 控制器。
我成功地使用了这个解决方案:http://jasonwatmore.com/post/2014/04/18/Post-a-simple-string-value-from-AngularJS-to-NET-Web-API.aspx
如果 link 已死,您只需将字符串值用双引号括在 POST 请求中,如下所示:
$http.post(Config.apiUrl + '/processfile', '"' + fileName + '"');