是否可以在 ASP.NET Web API 中创建中间件?我参考了网上的资料并尝试过,但没有成功

Posted

技术标签:

【中文标题】是否可以在 ASP.NET Web API 中创建中间件?我参考了网上的资料并尝试过,但没有成功【英文标题】:Is it possible to create middleware in ASP.NET Web API? I referred to info on the internet and tried, but did not work out 【发布时间】:2022-01-20 07:07:56 【问题描述】:

我在 SQL Server 中创建了包含用户 ID、用户名、用户密码和用户角色的表。当用户通过 ASP.NET Web 应用程序接口登录时,它将进行身份验证并创建 JSON Web 令牌,并允许用户基于该令牌进入下一页,它也可以正常工作。

但是现在我需要在 ASP.NET Web 应用程序界面中添加中间件,如果它的角色不满足特定的路由访问,它应该拒绝用户。

这可能吗? (前端是 react java 脚本)。

【问题讨论】:

是的,应该可以。如果您在运行时遇到问题,请提出一个新问题,详细说明您正在尝试做什么、尝试过什么以及遇到了什么问题。 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

有几种方法可以做到这一点。一种是使用Action Filter。如何做到这一点有an example here。这允许您将其限制为仅某些操作,因为您必须在每个操作或控制器上指定要应用它的属性。

如果您希望它适用于任何请求,您可以在Global.asax.cs 中执行此操作。如果您希望代码在每个请求的开头运行,请将您的代码放在Application_BeginRequest 中。由于您正在查看用户访问权限,因此您可以改用 Session_OnStart,它在用户首次开始会话时运行一次。

您可以直接修改Response,调用Response.Flush()CompleteRequest()发送响应并结束请求。

protected void Session_OnStart() 
    //runs once at the beginning of each session

    if (/* I don't like you for some reason */) 
        Session.Abandon();
        Response.StatusCode = 403;
        Response.Flush(); // Sends all currently buffered output to the client.
        CompleteRequest(); // Causes ASP.NET to bypass all events and filtering in the HTTP pipeline chain of execution
    


protected void Application_BeginRequest(object sender, EventArgs e) 
    //do something at the start of every request

【讨论】:

以上是关于是否可以在 ASP.NET Web API 中创建中间件?我参考了网上的资料并尝试过,但没有成功的主要内容,如果未能解决你的问题,请参考以下文章

在c#asp.net core web api中创建jwt令牌[重复]

在 ASP.NET Web API 中创建一个线程每 X 秒执行一次特定代码

如何在 Web ASP.NET (.NET Framework) 中创建启动文件?

是否可以在使用 Jira 凭据的 asp.net mvc 应用程序中创建登录页面?

如何在 Asp.NET Core WEB API 中使用 .Net (C#) 在 Payload 中创建具有自定义 JSON 声明的 JWT 令牌

在 asp.net c# 中创建 iPhone 推送通知 Web 服务