Autorisierung wurde beim Erstellen der ASP.NET-Web-API mit API-Schlüsselüberprüfung verweigert.

Ich möchte meine Web-API mit einem Schlüssel autorisieren, es wird jedoch immer "Die Autorisierung für diese Anforderung wurde verweigert" angezeigt. Das Folgende ist der letzte Code, den ich ausprobiert habe.

Dies ist die Delegating-Handler-Klasse:

// Message Handler class
public class APIKeyFilter: DelegatingHandler
    {
        // Default API Key
        private const string APIKEY = "b018a9c5105d427127e";
        protected override Task<HttpResponseMessage> SendAsync(
            HttpRequestMessage request, CancellationToken cancellationToken)
        {
            var query = request.RequestUri.ParseQueryString();
            string key = query["key"];
            if (APIKEY!=key)
            {
                var response = new HttpResponseMessage(HttpStatusCode.Forbidden);
                var tsc = new TaskCompletionSource<HttpResponseMessage>();
                tsc.SetResult(response);
                return tsc.Task;
            }
            return base.SendAsync(request, cancellationToken);
        }


    }

Dies ist die globale Klasse:

public class Global : HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            GlobalConfiguration.Configuration.MessageHandlers.Add(new Filter.APIKeyFilter());
        }
    }

Dies ist mein API-Controller:

    [Authorize]
    public class CategoriesController : ApiController
    {
        private WebAPI2Context db = new WebAPI2Context();

        // GET: api/Categories
        public IQueryable<Category> GetCategories()
        {
            return db.Categories;
        }
    }

Gibt es eine Möglichkeit, dies zu beheben? Ich versuche es zu googeln. Alle Ergebnisse, die ich gefunden habe, funktionieren bei mir nicht.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage