我有一个使用ASP的应用程序.NET窗体身份验证.在大多数情况下,它工作得很好,但我正试图通过.ashx文件.我希望ashx文件具有可选的身份验证(即,如果不提供身份验证头,那么它只是匿名工作).但是,根据您的工作,我希望在某些条件下要求身份验证.

我认为,如果没有提供所需的身份验证,那么用状态代码401进行响应将是一个简单的问题,但似乎Forms authentication模块正在拦截该信息,并以重定向到登录页面的方式进行响应.我的意思是,如果我的ProcessRequest方法是这样的:

public void ProcessRequest(HttpContext context)
{
    Response.StatusCode = 401;
    Response.StatusDescription = "Authentication required";
}

然后,我没有像我预期的那样在客户机上得到401错误代码,而是actually得到了302重定向到登录页面.

对于nornal HTTP流量,我可以看出这是多么有用,但对于我的API页面,我希望401能够不经修改地通过,以便客户端调用程序能够以编程方式响应它.

有办法吗?

推荐答案

ASP.NET 4.5添加了布尔值HttpResponse.SuppressFormsAuthenticationRedirect属性.

public void ProcessRequest(HttpContext context)
{
    Response.StatusCode = 401;
    Response.StatusDescription = "Authentication required";
    Response.SuppressFormsAuthenticationRedirect = true;
}

Asp.net相关问答推荐

Swashbuckle 通过 .NET 应用程序中的 XML 注释使用格式标识符

.Net Framework:w3wp.exe 中的异常

如何在 GridView 单元格中的(即
)中呈现解码的 HTML

ASP.NET 如何将控件呈现为 HTML?

OnCheckedChanged 事件未触发

HttpContext.Cache 过期

使用 JSON.NET 解析 json 字符串

Jquery asp.net 按钮单击事件通过 ajax

ASP.NET URL 重写

如何在同一解决方案中从 MVC 项目调试 Web API 项目

是否应该将 project.lock.json 文件签入源代码管理? (ASP.NET 核心 1.0)

如何获取 ActionLink 的工具提示?

存在 ios 7 虚拟键盘时,div 元素不会停留在底部

如何从后面的 ASP.NET 代码访问 HTML 表单输入

如何判断本地主机

MSBuild DeployOnBuild=true 不发布

如何强制 netwtonsoft json 序列化程序将 datetime 属性序列化为字符串?

在 Application_BeginRequest 中设置会话变量

将Bundle 包添加到现有的 ASP.NET Webforms 解决方案

如何将 DataTable 转换为类 Object?