Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何限制对HttpHandler的POST访问?_C#_Asp.net_Httphandler - Fatal编程技术网

C# 如何限制对HttpHandler的POST访问?

C# 如何限制对HttpHandler的POST访问?,c#,asp.net,httphandler,C#,Asp.net,Httphandler,我的asp.net web项目中有几个http处理程序(IHttpHandler)。现在我想限制对这些处理程序的访问。对于Handler1,我只允许POST请求,对于Handler2,我只允许GET请求 在我的web.config中,我修改了部分,如下所示,但两个处理程序仍然处理所有动词类型。我错过了什么吗?我正在使用IIS Express测试它 <httpHandlers> <add verb="POST" path="Handler1.ashx" type="MyNam

我的asp.net web项目中有几个http处理程序(
IHttpHandler
)。现在我想限制对这些处理程序的访问。对于Handler1,我只允许POST请求,对于Handler2,我只允许GET请求

在我的
web.config
中,我修改了部分,如下所示,但两个处理程序仍然处理所有动词类型。我错过了什么吗?我正在使用IIS Express测试它

<httpHandlers>
  <add verb="POST" path="Handler1.ashx" type="MyNamesapce.Handler1, MyAssembly"/>
  <add verb="GET" path="Handler2.ashx" type="MyNamesapce.Handler2, MyAssembly"/>
</httpHandlers>


这对您不起作用的原因是您将实现
IHttpHandler
的东西的两种稍有不同的“味道”混为一谈

有两种方法可以使用asp.net实现IHttpHandler:

  • 创建一个实现
    IHttpHandler
    的类,例如
    MyCustomHandler.cs
    。未在web.config文件中配置此类型的处理程序将不会响应任何请求
  • 创建一个
    .ashx
    文件(看起来您已经完成了),例如
    MyOtherHandler.ashx
    。此类处理程序将响应对其URL的任何请求,例如
    http://localhost/MyOtherHandler.ashx
第一种类型需要web.config文件中的条目才能工作,第二种则不需要。这就是为什么您看到
.ashx
处理程序响应所有HTTP谓词的原因,因为它们是由asp.net framework中响应.ashx文件请求的部分处理的,而不是由web.config文件触发的。如果您使用的是IIS Express,您可以在文件
%USERPROFILE%\Documents\IISExpress\config\applicationhost.config
中看到此配置。搜索“.ashx”,您将在
部分找到一行类似于下面的内容:

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx"
     verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" 
     preCondition="integratedMode,runtimeVersionv4.0" />
然后,您可以使用以下命令将其连接到web.config文件中:

<add name="Handler4" verb="POST" path="Handler4.ashx" type="HttpHandlers.Handler4, HttpHandlers" />


注意:我为测试这一点而创建的项目称为“HttpHandlers”,因此我在该web.config代码段中指定了类型声明。

@IgorGoroshko,很高兴为您提供帮助:)希望它工作正常且清晰!)我希望如此,但不幸的是现在我得到404错误。找不到资源。我还需要做什么吗?或者可能是因为我使用的是IIS Express,所以它不起作用?好的,我发现了问题,我在中添加了处理程序配置,但必须添加到。@IgorGoroshko,啊,是的,这样就可以了<代码>
是在经典/IIS6模式下运行时用于配置的“传统”容器
<add name="Handler4" verb="POST" path="Handler4.ashx" type="HttpHandlers.Handler4, HttpHandlers" />