首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在WebApi2 + Owin中使用AuthorizeAttribute时,HEAD请求失败并显示System.Net.ProtocolViolationException

在WebApi2 + Owin中使用AuthorizeAttribute时,HEAD请求失败并显示System.Net.ProtocolViolationException的原因是HEAD请求方法不支持身份验证。在WebApi2中,默认情况下,AuthorizeAttribute会应用到所有的HTTP请求方法,包括HEAD请求。然而,根据HTTP规范,HEAD请求方法不应该包含请求体,而身份验证通常需要在请求体中传递凭证信息。因此,当使用AuthorizeAttribute进行身份验证时,如果请求方法为HEAD,会导致System.Net.ProtocolViolationException异常。

解决这个问题的方法是自定义AuthorizeAttribute,并在其中排除HEAD请求方法。以下是一个示例:

代码语言:txt
复制
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
    protected override bool IsAuthorized(HttpActionContext actionContext)
    {
        if (actionContext.Request.Method == HttpMethod.Head)
        {
            return true; // 排除HEAD请求方法,直接返回true
        }

        // 其他请求方法进行身份验证
        return base.IsAuthorized(actionContext);
    }
}

然后,在需要进行身份验证的控制器或动作方法上使用CustomAuthorizeAttribute替代AuthorizeAttribute。

代码语言:txt
复制
[CustomAuthorize]
public class MyController : ApiController
{
    // ...
}

这样,当HEAD请求到达时,将不会进行身份验证,避免了System.Net.ProtocolViolationException异常的发生。

关于WebApi2和OWIN的更多信息,您可以参考以下链接:

  • Web API 2:https://docs.microsoft.com/zh-cn/aspnet/web-api/overview/older-versions/build-restful-apis-with-aspnet-web-api
  • OWIN:https://docs.microsoft.com/zh-cn/aspnet/aspnet/overview/owin-and-katana/owin-startup-class-detection
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇

ClaimsController 下的Index Action显示用户关联的所有声明,如下所示: ?...这会有一个潜在的问题,大公司工作时间很长的员工,当他们换部门换工作,如果旧的角色没被删除,那么可能会出现资料泄露的风险。...如若生成的声明不为BjStaff,那么他也就没权限访问OtherAction了,这完全是由用户信息所驱动,而非像传统的RoleController显示修改用户和角色的关系。...当Package 安装完成后,OWIN Startup启动项,添加对身份验证服务的支持: app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie...夜生人静,泡一壶茶,拿上一本书,细细品读,或许会有别样的精彩正等我们。

2.3K80

认识ASP.NET MVC的5种AuthorizationFilter

(当前访问者是未被授权用户,或者当前用户的用户名或者角色没有指定的授权用户或者角色列表),AuthorizeAttribute会创建一个HttpUnauthorizedResult对象,赋值给AuthorizationContext...如果采用Forms认证,配置的登录页面会自动被显示。...如下图所示,Action1能够正常地被调用,而Action2调用过程抛出异常 ,并提示请求包含危险的查询字符串。 ?...字符串属性Salt是为了增强防伪令牌的安全系数,不同的Salt值对应着不同的防伪令牌,不同的防伪令牌不同的地方被使用以避免供给者对一个防伪令牌的破解而使整个应用受到全面的攻击。...如果对应的Cookie不存在于当前请求,则直接抛出HttpAntiForgeryException异常;否则获取Cookie值,反序列化生成一个AntiForgeryData对象。

1.4K60

ASP.NET MVC5高级编程 ——(6)过滤器

二、过滤器的使用 过滤器实现的机制:MVC框架调用一个Action之前,它会检查方法的定义是否实现了特性(Attributes),如果实现的话,那么在请求处理管道适当的位置,该特性定义的方法会被调用...---Web程序的根目录的Web.config文件配置角色管理者。 ---适当的Action利用Roles类型来访问自己创建的RoleProvider的相关方法。...AuthorizeAttribute提供的两个定制点: AuthorizeCore( )方法,实现授权检查。 HandleUnauthorizedRequest( )方法,授权失败时调用。...然后项目根目录添加一个名为Content的文件夹,该文件夹下创建SpeciErrorPage.html文件,当异常被处理,将以这个错误页面显示个用户。该页面代码如下: ?...控制器应用MyExection异常过滤器,主动让其抛出一个空引用异常,以便测试。 ? 运行结果如下: ?

2.2K40

.Net Web开发技术栈

Filter IAuthenticationFilter(验证过滤器 MVC5)验证是否合理请求,是否合理用户 IAuthorizationFilter(授权过滤器) AuthorizeAttribute...IIs的常用功能及使用及配置: 请求筛选、失败请求跟踪等 .Net MVC生命周期 Httphandler、HttpModule、Globar的编写及应用... ......OWIN解耦 Open Web Server Interface for .NET,定义了一种中间件管道中用于处理请求和相关响应的标准方式,是种规范,用于解耦Web 服务器和Web 应用程序。...(.dll文件).[Bin]文件夹以程序代码表示的任何类, 都会自动应用程序应用到 Web.config:用来储存Asp.net Web应用程序的配置信息,通过继承关系,每个Web.config...作者:小曾 出处:http://www.cnblogs.com/1996V/p/7700087.html 欢迎转载,但任何转载必须保留完整文章,显要地方显示署名以及原文链接。

4.9K30

爬虫数据的json转为csv文件

需求:我们之前通过接口爬虫 爬取一些数据, 这些数据都是Json格式的,为了方便我们的甲方使用 所以需要把这些数据转为csv 方便他们使用(例如在表单里面搜索,超链接跳转等等) 直接上代码吧: 转换之前...: `https://www.instagram.com/${item.username}`,   }; }); // console.log(newData); // 过滤好用 重新写入一个新的文件...cjdropshipping/data1_ed.json",   JSON.stringify(newData),   (err) => {     if (err) console.log("写文件操作失败...      var JSonToCSV = {         /*     * obj是一个对象,其中包含有:     * ## data 是导出的具体数据     * ## fileName 是导出保存的文件名称... 是string格式     * ## showLabel 表示是否显示表头 默认显示 是布尔格式     * ## columns 是表头对象,且title和key必须一一对应,包含有

60420

利用EntLib授权机制实现对ASP.NET页面的自动授权

ASP.NET默认采用UrlAuthorizationModule和FileAuthorizationModule分别实现针对请求地址和物理文件的授权,但是很多情况下我们需要额外的授权方式。...页面得以正常显示;而当我们以Baz的身份登录后,显示“Access denied…”。...具体的授权判断以及对非授权请求的处理定义方法OnAuthorization方法上。...实现的OnAuthorization我们按照Entlib授权框架的编程模式判断当前Principal是否具有针对指定授权规则的权限,对于非授权请求我们直接调用HandleUnauthorizedRequest...如下面的代码片断所示,重写的ProcessRequest方法实现了对应用在当前类型上的AuthorizationFilterAttribute特性的解析和执行,进而提供了对授权的实现。

1.1K90

ASP.NET MVC编程——验证、授权与安全

为限制控制器只能执行HTTPS,使用RequireHttpsAttribute 2 授权 对账户的权限的控制可以通过控制器或控制器操作上加AuthorizeAttribute 属性。...然后检验是否可匿名访问,如果可以匿名访问就不进行验证; 综合以上分析,扩展AuthorizeAttribute要注意: 1)子类AuthorizeCore,调用父类的AuthorizeCore方法...主动注入:用户将含有恶意脚本的内容输入到页面文本框,然后屏幕上显示出来。...使用限制: 客户端浏览器不能禁用cookie 只对post请求有效 若有XSS漏洞,则可轻易获取令牌 对Ajax请求不能传递令牌,即对Ajax无效 3)使用幂等的Get请求,仅使用Post请求修改数据(...,浏览器每次请求通过Http头进行传递 2)持久性cookie:存储硬盘上,同样通过Http头进行传递 二者的区别:会话cookie常在会话结束失效,而持久性cookie在下一次访问站点仍然有效。

3.1K60

基于OWin的Web服务器Katana发布版本3

当 ASP.NET 首次 2002 年发布,时代有所不同。...然后,这些组件链接成一个管道,基于 OWIN 的服务器将会向该管道推送请求。 为了更有效地使用资源,管道的所有组件都应该是异步的,这体现在返回 Task 对象的应用程序委托。...如果你应用中使用了Google认证,并且打算升级到Katana版本3,请确保你已读过这篇帖子! Katana可以作为NuGet包获得。...Microsoft.Owin.SelfHost – 包含了为自行指定的进程托管基于OWIN的应用程序所必需的一些组件。...Microsoft.Owin.Host.SystemWeb – 也是OWIN服务器实现,但它允许基于OWIN的应用程序运行在IIS,并能够使用ASP.NET的请求管道。

1.3K50

ASP.NET Core 6框架揭秘实例演示:基于角色的授权

使用最简洁的代码实现登录、认证和注销》,我们提供了一个用来演示登录、认证和注销的程序,现在我们在此基础上添加基于“角色授权的部分”。...另一种推荐的做法是应用启动的过程创建一系列通过AuthorizationPolicy对象表示的授权规则,指定一个唯一的名称对它们进行全局注册,那么后续就可以针对注册的策略名称进行授权检验。...如下面的代码片段所示,调用AddAuthorization扩展方法注册授权相关服务,我们利用作为输入参数的Action对象对授权策略进行了全局注册。...; [S2804]将“授权策略”绑定到路由终结点 如果在调用AddAuthorization扩展方法已经定义了授权策略,我们也可以按照如下的方式将策略名称设置为AuthorizeAttribute特性大的...; 如果采用Lambda表达式来定义终结点处理器,我们可以按照如下的方式将AuthorizeAttribute特性标注表达式上。

27330

ASP.NET MVC随想录——漫谈OWIN

简单来说,当请求到达服务器,Windows内核组件HTTP.SYS组件捕获请求,他会分析请求决定是否交给IIS来处理,当请求到达IIS之后,IIS会根据处理程序映射来匹配请求交给对应的程序集(实现了...IIS 和 OS IIS必须是安装运行在Windows操作系统,这是微软产品的一贯风格,环环相套,但不得不考虑他们的限制和局限性: IIS往往和操作系统(Windows Server)绑定在一起,...使用OWIN,Web Framework不再依赖IIS和OS,这意味着你能使用任何你想的来替换IIS(比如:Katana或者Nowin),并且必要随时升级,而不是更新操作系统。...Server:这是实际的Http Server,绑定套接字监听的HTTP请求然后将Request和Response的Body、Header封装成符合OWIN规范的字典并发送到OWIN Middleware...同时,通过使用环境字典各个中间件之间进行信息的传递,而非传统ASP.NET(System.Web)中使用HttpContext贯穿ASP.NET整个生命周期来传递。

1.3K110

.NET实现虚拟WebShell第3课之IAuthorizationFilter

IAuthorizationFilter接口,如果我们要求某个Action只能被认证的用户访问,可以Controller类型或者Action方法上应用具有如下定义的AuthorizeAttribute...如果没有显式地对Users和Roles属性进行设置,AuthorizeAttribute进行授权操作的时候只要求访问者是被认证的用户。...(当前访问者是未被授权用户,或者当前用户的用户名或者角色没有指定的授权用户或者角色列表),AuthorizeAttribute会创建一个HttpUnauthorizedResult对象,赋值给AuthorizationContext...方法是当授权失败处理的动作 0x04 WebShell 下面笔者将改写OnAuthorization方法,首先我们站点文件夹下添加一个名为 dotnetofAuthorizeFilter.aspx...MyAuthenticationFilter类继承 IAuthorizationFilter 接口,OnAuthorization方法内获取外部传入的base64数据,得到request对象后解码,另外为了具备命令执行后回显,使用

41620

ASP.NET MVC编程——控制器

每一个请求都会经过控制器处理,控制器的每个方法被称为控制器操作,它处理具体的请求。 1操作输入参数 控制器的操作的输入参数可以是内置类型也可以是自定义类型。...3 HTTP动词特性 特性有HttpGet、HttpPost、HttpDelete、HttpPut、HttpHead、HttpOptions、HttpPatch,当没有限定任何动词,不论何种请求,get...将调用页代码修改如下: @Html.Action("TestPy") 运行可以正常显示部分视图内容 3)RequireHttpsAttribute...使用异步控制器的目的: 异步控制器操作也要等待任务直至处理完,所以处理速度不比同步方法快,其主要作用是高效地利用服务器资源。...注意如果控制器使用HttpPost特性修饰,而客户端发起的是get请求,也会认为是无法找到操作。

2.1K90

Nginx负载均衡

大型网站,负载均衡是有想当必要的。...尤其是同一间访问量比较大的大型网站,例如网上商城,新闻等CMS系统,为了减轻单个服务器的处理压力,我们引进了负载均衡这一个概念,将一个服务器的压力分摊到几个服务器上,一方面减轻了宕机的几率,另一方面也使得宕机后还要其他服务器可以继续稳定运行...这篇文章将要介绍的主要内容如下: 配置三台服务器 分别在三台服务器上部署同样的服务代码 使用Nginx实现负载均衡 我们的Nginx负载均衡器将部署一台交互服务器上,配置与其他两台服务器的连接...实现过程 使用ASP.NET webapi2 写一个简单地返回json的接口,为了展示我们调用的是不同服务器上的接口,我们以数字形式分别生成三个接口服务,并且分别部署到三台服务器的iis。...可以发现,我们每一次的请求,调用的后台服务接口都不是同一个,这样就保证了大量客户访问同一个服务器地址时候,可以将一个服务器的压力分别分摊到几个服务器上,达到了负载均衡的目的。

1.1K51

signal 聊天记录_实时查看车辆位置app

安装完成后会多以下几个文件 第二步:右键项目->新建项,选择signalr集线器类,写入代码,namespace与类名记得改成实际类名 如下: using Microsoft.AspNet.SignalR...网页显示部分内容如下: 第四步:编写html页面,代码如下: @{ Layout = null; } <!...sessionStorage.setItem("user", $("#txtName").val()); else { alert("登录失败...sendBtn" disabled="disabled">发送消息 注意头部引用的脚本,前两个是你的项目中的实际脚本文件,最后一个是在运行时动态生成的,实际使用时需要修改前两个...如果有更好的方法或不懂得地方欢迎评论区教导和提问喔! 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。

92540

ASP.NET Core端点路由 作用原理

Endpoint Routing的动机 端点路由出现之前,我们一般在请求处理管道的末尾,定义MVC中间件解析路由。这种方式意味着处理管道,MVC中间件之前的中间件将无法获得路由信息。...该中间件查看应用程序定义的端点集合,根据请求选择最佳匹配。 UseEndpoints 将端点执行添加到中间件管道。.../healthz,感知到AuthorizeAttribute metadata ?...于是翻阅GithubAuthorizationMiddleware3.0源码:发现请求处理的委托确实关注了Endpoint,并提取了metadata的IAuthorizeData授权信息。...结论 端点路由:允许ASP.NET Core应用程序中间件管道的早期确定要调度的端点, 以便后续中间件可以使用该信息来提供当前管道配置无法提供的功能。

1.1K10

WebApiThrottle限流框架使用手册

本篇主要介绍下Net限流框架WebApiThrottle的使用。 WebApiThrottle是一个专门为webApi限制请求频率而设计的,支持寄宿OWIN上的中间件的限制过滤。...比如一个客户端同一秒请求了3次,而你配置的限制策略是每秒1次,那么分钟、小时、天的计数器只会记录第一次调用,因为第一次请求不会被拒绝。...,寄宿IIS里使用ASP.NET版本的cache、自寄宿Owin使用运行时版本的缓存MemoryCache。...启动注册ThrottlingHandler对象,并在构造函数传入PolicyCacheRepository ,如果你是通过Owin自寄宿的webapi,需要使用PolicyMemoryCacheRepository...需要注意的是,webapi请求管道,ThrottlingHandler是controller前面执行,因此在你不需要ThrottlingFilter提供的功能,可以用ThrottlingHandler

1.3K60

WebApiThrottle限流框架使用手册

本篇主要介绍下Net限流框架WebApiThrottle的使用。 WebApiThrottle是一个专门为webApi限制请求频率而设计的,支持寄宿OWIN上的中间件的限制过滤。...比如一个客户端同一秒请求了3次,而你配置的限制策略是每秒1次,那么分钟、小时、天的计数器只会记录第一次调用,因为第一次请求不会被拒绝。...,寄宿IIS里使用ASP.NET版本的cache、自寄宿Owin使用运行时版本的缓存MemoryCache。...启动注册ThrottlingHandler对象,并在构造函数传入PolicyCacheRepository ,如果你是通过Owin自寄宿的webapi,需要使用PolicyMemoryCacheRepository...需要注意的是,webapi请求管道,ThrottlingHandler是controller前面执行,因此在你不需要ThrottlingFilter提供的功能,可以用ThrottlingHandler

1.7K50
领券