我正在调用这样的Web API方法:
$.post("/api/attendances", { gigId: button.attr("data-gig-id") })
.done(function() {
button.removeAttr("btn-default")
.addClass("btn-primary")
.text("going");
})
.fail(function() {
alert("something went wrong");
});
Web API类看起来像这样:
[Authorize]
public class AttendancesController : ApiController
{
private ApplicationDbContext _context;
public AttendancesController()
{
_context = new ApplicationDbContext();
}
[HttpPost]
public IHttpActionResult SaveAttenance(AttendanceDto dto)
{
string userId = User.Identity.GetUserId();
if (_context.Attendances.Any(a => a.GigId == dto.GigId && a.AttendeeId == userId))
{
return BadRequest();
}
_context.Attendances.Add(new Attendance()
{
GigId = dto.GigId,
AttendeeId = userId
});
_context.SaveChanges();
return Ok();
}
}
我正在测试与匿名用户的通话,在调用方法时,我得到状态代码200,这不是我所期待的。我也收到了这个:
responseText:“{”消息“:”此操作已被拒绝授权 请求。”}” 状态:200 statusText:“确定”
为什么Authorize属性不返回与responseText匹配的状态代码?就我而言,无论用户是否被授权,.done函数内的JavaScript代码都将执行。任何指导表示赞赏。
更新:如果有帮助,请点击我的web.config链接:https://pastebin.com/B26QGjv8
答案 0 :(得分:0)
那是因为虽然您使用的是[Authorize]属性,但您没有对结果做任何事情。
该方法按预期工作,您发出请求,您未获得授权,但您继续在控制器中工作。
处理控制器中的异常:
重写On Exception方法并创建一个异常属性:
public class NotImplExceptionFilterAttribute : ExceptionFilterAttribute
{
public override void OnException(HttpActionExecutedContext context)
{
if (context.Exception is NotImplementedException)
{
context.Response = new HttpResponseMessage(HttpStatusCode.NotImplemented);
}
}
}
在你的控制器中这样称呼它:
public class ProductsController : ApiController
{
[NotImplExceptionFilter]
public Contact GetContact(int id)
{
throw new NotImplementedException("This method is not implemented");
}
}
在您的WebApiConfig.cs中添加:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Filters.Add(new ProductStore.NotImplExceptionFilterAttribute());
// Other configuration code...
}
}
使用此作为参考,所有片段均取自此处: