- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个 Restful API,我需要在发出实际的 DELETE 请求之前检查授权。所以我认为使用 HEAD 方法作为预检检查会很好。
我预计使用 HEAD 方法的未经授权的请求将返回没有正文的 401/403 响应。然而,事实证明 WebApi2 崩溃并出现以下异常并关闭连接:
Exception caught: 'System.Net.ProtocolViolationException' in System.dll ("Bytes to be written to the stream exceed the Content-Length bytes size specified.")
其他 HTTP 方法(DELETE、GET)似乎工作正常 - 返回 401 响应。
我可以通过 GET 请求来解决它,但这似乎是 WebApi 中的一个错误。 AuthorizeAttribute总是添加一个内容,不管原来的请求方法是什么。
我的问题是:这是错误还是预期的行为,我为什么不应该在这里使用 HEAD 方法?
这是一个重现该问题的示例程序:
namespace OwinServer
{
[Authorize]
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new[] { "value1", "value2" };
}
//HEAD api/values
public void Head()
{
}
//DELETE api/values
public void Delete()
{
}
}
class Program
{
static void Main(string[] args)
{
var baseAddress = "http://localhost:9000/";
// Start OWIN host
using (WebApp.Start(baseAddress, Configuration))
{
Console.WriteLine("Host started");
Console.ReadLine();
}
}
public static void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
var config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
appBuilder.UseWebApi(config);
}
}
}
可以使用 PowerShell 测试该行为:
失败的示例请求:
Invoke-WebRequest -Uri 'http://localhost:9000/api/values' -Method HEAD
有效的示例请求:
Invoke-WebRequest -Uri 'http://localhost:9000/api/values' -Method DELETE
最佳答案
这个已经讨论过了https://github.com/aspnet/AspNetWebStack/issues/189 .似乎他们希望您最终处理它。
关于c# - 在 WebApi2 + Owin 中使用 AuthorizeAttribute 时,HEAD 请求因 System.Net.ProtocolViolationException 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45377956/
这是我的 CustomAuthorizeAttribute 类: public class CustomAuthorizeAttribute : AuthorizeAttribute {
TL;博士 :当 IdentityServer3 将表单发布到始终是根 url 的返回 url 时,MVC 应用程序如何知道在通过身份验证过程后重定向到某个操作? 此问题中的示例取自 Identity
在我们的 MVC 解决方案中,我们有两个 AuthorizeAttribute 的自定义实现 - 一个名为 BasicHttpAuthorizeAttribute 并已在生产中使用多年,另一个 Rol
我的应用程序中有一个自定义的 AuthorizeAttribute,它接受一个输入参数 bool UserIsOnline。此参数用于增加一个表字段,该字段包含有关上次用户交互时间的信息,即对于在后台
我有一个 ApiController 类,其中有 10 个公共(public)方法。 在这 10 个方法中,有 9 个需要 [Authorize(Roles="Admin")]。不需要的,不需要任何授
我目前正在尝试根据用户角色在新的 ASP MVC 5 应用程序中实现安全性。目标是防止用户在没有特定角色(或更高级别)的情况下访问某些 Controller 或 Controller 方法。根据到目前
我正忙着为我的名为 MyAuthorizeAttribute 的操作方法编写自己的自定义属性,我还在忙着编写代码,这是我的部分代码: [AttributeUsage(AttributeTargets.
我创建了一个自定义 AuthorizeAttribute 类来处理我的 MVC4 应用程序中的精细授权。 这是类: [AttributeUsage(AttributeTargets.Method, A
我已经从 AuthorizeAttribute 实现了 RoleAuthorize 类 public sealed class RoleAuthorize : AuthorizeAttribute {
我正在使用 MVC3/4。但这只是授权中的一般问题。 我有一个角色在数据库中名为“Trip Leader”,其中包含一个空格。 我尝试了 [Authorize(Roles="'Trip Leader'
我们想授权用户,如果他们被授权,我们想将他们的角色和权限添加到用户并将其添加到 IPrinciple 我们有两种方法可以做到这一点,一种是在 global.asax Application_Authe
我一直在互联网上寻找为什么我的自定义 AuthorizeAttribute 在我的 MVC WebApi 中不起作用。我看到有人在 SO 上问过这种事情,但还没有帮助我解决我的问题: [Attrib
我想使用标准的 AuthorizeAttribute(即不继承它)但使用自定义重定向。那可能吗?我应该在哪里检查 401 并重定向? 我试过添加 但它没有用。 最佳答案 在我的 A
在 Windows 域内网站点(使用 )上工作时,我遇到了以下问题: [Authorize(Roles = "Domain Users, Domain Admins")] public class
我有一个像这样的自定义 AuthorizeAttribute public class DevMode : AuthorizationFilterAttribute { public over
我试图阻止特定角色(比如 RoleA)中的特定用户访问特定操作。允许匿名用户访问,但不允许 RoleA 中的用户访问该操作。 所以我做了这样的事情: [AllowAnonymous] [CustomA
如果我做了more than one API调用同时出现错误 A second operation started on this context before a previous asynchro
我有一个自定义的 RequireHttpsAttribute 和一个自定义的 AuthorizeAttribute,我在 FilterConfig 中应用它们以确保所有 Controller 都使用
在我的 MVC 5 应用程序中,我按如下方式装饰我的 Controller : [Authorize] public class Controller { .. 但是,我的一个要求是使用 toke
我已经研究了一段时间,现在试图弄清楚如何在我的 View 中使用我的自定义 AuthorizeAttribute 类来显示和隐藏链接。我正在从 IsInRole 过渡到自定义 AuthorizeAtt
我是一名优秀的程序员,十分优秀!