Конечная точка OData: можно ли редактировать службу документов - PullRequest
0 голосов
/ 07 ноября 2018

Dears,

Я разработал конечную точку OData, следуя этому https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/odata-v4/create-an-odata-v4-endpoint Я закончил с этим, но у меня есть ограничение: для всех функций API заголовок должен содержать ключ авторизации. Это делается везде, НО в сервисном документе. Сервисный документ - это то, что вы получили при просмотре URL https://SITE/api/v1:

{"@odata.context":"http://SITE/api/v1/$metadata","value":[{"name":"things","kind":"EntitySet","url":"things"},{"name":"others","kind":"EntitySet","url":"others"}]}

Значит, вы знаете, как создается такая служба документов? Можно ли его редактировать? Или даже, есть ли способ проверить заголовок в такой службе документов? Заранее спасибо за помощь,

С уважением,

1 Ответ

0 голосов
/ 26 ноября 2018

Решил сам, используя следующий модуль:

using System;
using System.Linq;
using System.Web;

namespace Api.Modules
{
    public class AuthorizationModule : IHttpModule
    {
        public void Dispose(){}

        private void Context_Authorization(object sender, EventArgs e)
        {
            HttpApplication application = (HttpApplication)sender;
            if (!IsAuthorized(application.Context))
            {
                application.Context.Response.Status = "403 Forbidden";
                application.Context.Response.StatusCode = 403;
                application.CompleteRequest();
            }
        }

        public bool IsAuthorized(HttpContext context)
        {
            if (!HttpContext.Current.Request.Headers.AllKeys.Contains("Authorization"))
                return false;

            string authHeader = HttpContext.Current.Request.Headers["Authorization"];

            if (!authHeader.Equals(Properties.Resources.Authorization_Key))
            {
                return false;
            }
            return true;
        }


        public void Init(HttpApplication context)
        {
            context.AuthenticateRequest += new EventHandler(Context_Authorization);
        }
    }
}

Если это поможет ...

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...