【发布时间】:2017-03-06 14:04:48
【问题描述】:
我正在使用 microsoft asp.net 身份教程示例应用程序 [此处][1],直到我对我的项目所需的功能感到满意为止。我需要有一个 API,我可以从单独的 MVC Web 应用程序调用它来对本地 sql 服务器进行身份验证/授权,并将登录凭据从 Web 应用程序传递到 api 以获取标头令牌等。然后我需要能够检查令牌是否有任何请求以提取数据或将数据保存回数据库。
我在该示例解决方案中添加了一个 Web 应用程序项目,它只是一个带有按钮的表单和一些 jquery 来捕获被点击的提交按钮:
$(document).ready(function () {
var register = function() {
var dataa = {
Email: "password@host.com",
Password: "password",
ConfirmPassword: "password"
};
$.ajax({
type: 'POST',
url: '/api/Account/Register',
contentType: 'application/json; charset=utf-8',
data: JSON.stringify(dataa)
});
return false;
}
$('#btnRegister').click(register);
});
然后这里是 api 本身的控制器:
[Authorize]
[EnableCors("*","*","*")]
[RoutePrefix("api/Account")]
public class AccountController : ApiController
{
[AllowAnonymous]
[Route("Register")]
[HttpPost]
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
IdentityResult result = await UserManager.CreateAsync(user, model.Password);
if (!result.Succeeded)
{
return GetErrorResult(result);
}
return Ok();
}
}
当我尝试在 api 上调用 Register 函数时,我在浏览器中收到 404 错误 (jquery-1.10.2.js:8720 POST http://localhost:35714/api/Account/Register 404 (Not Found))。如何从前端调用 api 函数,这个调用可以从我的 web 应用控制器进行还是应该在客户端进行?
添加了 Microsoft.aspnet.cors 和 microsoft.aspnet.webapi.cors,将 config.EnableCors() 添加到 webapiconfig.cs 并将 [EnableCors] 添加到从 apicontroller 继承的 accountcontroller。
【问题讨论】:
-
将
'api/Account/Register'替换为'/api/Account/Register'(在 URL 前添加/使其成为绝对值) -
我也注意到了这一点,并更新了我的代码以反映我已经尝试过,同样的错误。
-
您确定您的网址确实是
/api/Account/Register? -
另外,尝试用
[System.Web.Http.HttpPost]装饰你的Register方法 -
添加了 HttpPost 数据注释,现在我得到一个不同的错误:XMLHttpRequest 无法加载 localhost:44305/api/Account/Register。对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'localhost:35714'。响应的 HTTP 状态代码为 405。
标签: jquery asp.net asp.net-web-api oauth asp.net-identity