Api令牌验证错误

时间:2016-06-07 10:05:41

标签: c# asp.net-web-api2

如果JSON API上的令牌无效,我应该返回什么类型或错误

    // GET api/Job
    public IEnumerable<Job_Hdr> GetJob_Hdr()
    {
        if (Validation.isValid(Request.Headers.GetValues("Token").Single()) == true)
            throw new Exception("Invalid token");
        ...
    }

2 个答案:

答案 0 :(得分:0)

我同意评论中建议的@Evk,错误返回应为HTTP 401 Unauthorized

在WebAPI中,我建议将函数的返回类型设为HttpResponseMessage,并且可以抛出错误:

return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "String error Message");

所以最终代码可以是:

    // GET api/Job
    public HttpResponseMessage GetJob_Hdr()
    {
        if (Validation.isValid(Request.Headers.GetValues("Token").Single()) == true)
            return Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "String Message");
        ...
        IEnumerable<Job_Hdr> JobModelCollection=GetYourData();
        return Request.CreateResponse(HttpStatusCode.OK, JobModelCollection);
    }

如果您想更改API路线,也可以通过使用属性[Route("api/Job/GetJob_Hdr")]修饰API方法来实现。通过这种方式,您可以将方法称为api/Job/GetJob_Hdr&amp;也可以使用Routes在同一个API中定义多个get方法。

答案 1 :(得分:0)

https://stackoverflow.com/a/31206850/5750143

您应该从API方法中抛出HttpResponseException,而不是HttpException

throw new HttpResponseException(HttpStatusCode.Unauthorized);

或者,如果您想提供自定义消息:

var msg = new HttpResponseMessage(HttpStatusCode.Unauthorized) { ReasonPhrase = "Oops!!!" };
throw new HttpResponseException(msg);