加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – HTTP PUT在IIS 8.5上失败

发布时间:2020-12-16 09:40:13 所属栏目:asp.Net 来源:网络整理
导读:这似乎越来越深入IIS而不是我擅长!所以我有一个适用于GET和POST的Web API控制器.第一个屏幕截图显示了GET的处理.一切都很棒,我得到了回应. View Full Size 但后来我提出了一个PUT请求,这一切都崩溃了.它似乎穿过ManagedPipelineHandler,然后进入DefaultDocu
这似乎越来越深入IIS而不是我擅长!所以我有一个适用于GET和POST的Web API控制器.第一个屏幕截图显示了GET的处理.一切都很棒,我得到了回应.

View Full Size

但后来我提出了一个PUT请求,这一切都崩溃了.它似乎穿过ManagedPipelineHandler,然后进入DefaultDocumentModule并以405失败.

View Full Size

View Full Size

没有安装WebDAV,我试图在web.config级别删除它.处理程序被覆盖以支持PUT.

<handlers>
  <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
  <remove name="OPTIONSVerbHandler" />
  <remove name="TRACEVerbHandler" />
  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" />
</handlers>

尽管如此,ASP.NET无法处理请求,我正在寻找有关调试的一些想法?这是失败的动作方法,PUT和一个有效的动作方法,一个GET.

public class ProductsController : ApiController
{
    [HttpPut]
    [Route("api/products")]
    public AddProductResponse AddProduct(AddProductRequest request)
    {
        return new AddProductResponse(); 
    }

    [HttpGet]
    [Route("api/products/manufacturers")]
    public ManufacturersResponse GetProductManufacturers()
    {
        var productService = new ProductService();
        var manufacturers = productService.GetManufacturers();
        return new ManufacturersResponse { Manufacturers = manufacturers.OrderBy(m => m.BusinessName) };
    }
}

似乎我在请求生命周期的早期错过了手.

FREB似乎显示了PUT的GENERAL_SHILD_REQUEST_START,不知道为什么托管管道正在创建最终落入无法处理PUT的DefaultDocumentModule的额外子请求.

解决方法

看看你的场景(感谢分享你的repro项目),问题是投影将webapi放在项目内的/ api文件夹中.

具体来说还有/ api / products,所以当http / ap的/ api /产品被命中时,IIS将其视为目录浏览请求,并拒绝在其上提供PUT动词.

解决方案:重命名api文件夹,通常尝试不在正在调用REST API的位置映射文件夹.这不是部署中的问题,但在本地Web应用程序上,文件夹就在那里,IIS首先处理它.

另一种解决方案(虽然不太推荐)是使用

<modules runAllManagedModulesForAllRequests="true" />

这将让ASP.NET在IIS之前获得第一次破解,但这不是一个推荐的做法,只是为了解决这样的小问题.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读