我在项目中有多个<table id="codexpl">
<tr>
<th>No</th>
<th>Club</th>
<th>Points</th>
</tr>
<tr>
<td>row 1 col 1</td>
<td>row 1 col 2</td>
<td>row 1 col 3 </td>
</tr>
<tr>
<td>row 2 col 1</td>
<td>row 2 col 2</td>
<td>row 2 col 3 </td>
</tr>
</table>
。我已经将这些处理程序注册到RouteCollection以获取特定URL上的触发器。
我希望以编程方式使用某些处理程序。我不想在IHttpHandler
中使用以下设置。我不能使用web.config
属性,因为它没有使用asp.net MVC中看到的Controller。
[Authorize]
当前项目不在任何地方使用<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
。
它正在使用System.Web.Routing.Route()通过返回IHttpHandler的自定义创建的类System.Web.Mvc
注册路线信息。该处理程序示例:https://docs.microsoft.com/en-us/dotnet/api/system.web.ihttphandler.processrequest?view=netframework-4.8#examples
答案 0 :(得分:0)
我不确定这是否会对旧的MVC有帮助,但这是您在AspNetCore中间件中可以做到的方式。
基本上,您应未授权的请求返回401握手,MVC管道应为您进行身份验证。下次您检查用户是否已通过身份验证时,如果用户已通过,则跳过握手;如果先前失败,则请求身份验证。
我在中间件中执行此操作,该中间件在请求到达控制器之前就将其拦截。
if (context.User?.Identity?.IsAuthenticated != true)
{
context.Response.StatusCode = 401;
context.Response.Headers.Add("www-authenticate", new StringValues(new[] { "Negotiate", "NTLM" }));
await context.Response.CompleteAsync();
}
我认为旧的MVC应该相似,但是您的里程可能会有所不同。
答案 1 :(得分:0)
每个问题OpenID documentation都显示了如何在Authenticate
事件中进行身份验证,因此可以使用ASP.NET管道将global.asax
中的Authenticate_Request
个事件挂接到这里为了清楚起见:
//file: Global.asax.cs
...
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
OpenIdAuthentication.Authenticate();
}