C# Api令牌验证错误

C# Api令牌验证错误,c#,asp.net-web-api2,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"); .

如果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");
        ...
    }
//获取api/Job
公共IEnumerable GetJob_Hdr()
{
if(Validation.isValid(Request.Headers.GetValues(“Token”).Single())==true)
抛出新异常(“无效令牌”);
...
}

我同意评论中建议的@Evk,返回的错误应该是
HTTP 401
未经授权的

在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/Job
公共httpresponsemessagegetjob_Hdr()
{
if(Validation.isValid(Request.Headers.GetValues(“Token”).Single())==true)
返回请求.CreateErrorResponse(HttpStatusCode.Unauthorized,“字符串消息”);
...
IEnumerable JobModelCollection=GetYourData();
return Request.CreateResponse(HttpStatusCode.OK,JobModelCollection);
}

如果您想更改API路由,还可以通过使用属性
[route(“API/Job/GetJob\u Hdr”)]
来修饰API方法。通过这种方式,您可以将方法调用为
api/Job/GetJob\u Hdr
&也可以使用路由在同一个api中定义多个get方法。

我同意@Evk在评论中的建议,返回的错误应该是
http401
未经授权的

在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/Job
公共httpresponsemessagegetjob_Hdr()
{
if(Validation.isValid(Request.Headers.GetValues(“Token”).Single())==true)
返回请求.CreateErrorResponse(HttpStatusCode.Unauthorized,“字符串消息”);
...
IEnumerable JobModelCollection=GetYourData();
return Request.CreateResponse(HttpStatusCode.OK,JobModelCollection);
}
如果您想更改API路由,还可以通过使用属性
[route(“API/Job/GetJob\u Hdr”)]
来修饰API方法。通过此方法,您可以将方法调用为
api/Job/GetJob\u Hdr
&还可以使用路由在同一个api中定义多个get方法。

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

throw new HttpResponseException(HttpStatusCode.Unauthorized);
或者,如果要提供自定义消息:

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

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

throw new HttpResponseException(HttpStatusCode.Unauthorized);
或者,如果要提供自定义消息:

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

401未经授权。顺便说一下,在上面的代码中,当令牌有效时,您会抛出异常。401未经授权。顺便说一下,在上面的代码中,当令牌有效时,您会抛出异常。