model-view-controller - OData 端点:是否可以编辑文档服务
问题描述
亲爱的,
我设计了一个 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"}]}
那么,你知道这样的文件服务是如何产生的吗?是否可以编辑它?甚至,有没有办法在这样的文档服务中检查标题?在此先感谢您的帮助,
亲切的问候,
解决方案
使用以下模块由我自己解决:
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);
}
}
}
如果有帮助...
亲切的问候,
推荐阅读
- c - C中浮点数据类型的结构(二进制格式)是什么?
- typescript - 错误 TS2339:使用 Array 与 ReadonlyArray 有什么区别?
- haskell - 从 State Monad 获取结果和状态,而不仅仅是状态
- laravel - 黑客可以用您的 .ENV 文件做什么?
- python - 具有树结构节点的散点图?
- http - 如何防止网站检测到 Fiddler
- python - 如何从 json 文件创建自定义查询集
- automata - 为以下语法设计 NDPA(下推自动机)
- javascript - 如何从 POST 响应中播放音频?
- java - 在android studio中制作热点二维码