HTTP状态代码200但访问被拒绝。 WebAPI ASP.NET MVC

时间:2017-11-20 04:30:17

标签: c# jquery asp.net-mvc asp.net-web-api

我正在调用这样的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

1 个答案:

答案 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...
    }
}

使用此作为参考,所有片段均取自此处:

Handling exceptions in Web Api.