如何在ASP.NET Core中处理PROPFIND HTTP谓词请求(或其他请求)?

3

我正在寻找如何处理更为特殊的HTTP动词,例如PROPFINDMKCOL的实现选项,使用ASP.NET Core或ASP.NET Core MVC。

在ASP.NET Core MVC中,您可以使用装饰器修饰您的操作方法:

[HttpGet]
[HttpPut]
[HttpPost]
[HttpDelete]
[HttpHead]
[HttpOptions]
[HttpPatch]

对于REST API或Web应用程序,这些HTTP动词已经足够。例如,对于WebDav,还必须以某种方式处理PROPFINDMKCOL动词。
是否有可能扩展ASP.NET Core MVC以支持比上述动词更多的HTTP动词? 或者您认为编写自己的中间件组件是将WebDav功能添加到ASP.NET Core应用程序中的更好方法?
我已经查看了ASP.NET Core源代码库以获取一些想法。但我现在卡住了。
1个回答

6
解决方案比我想象的更简单。您可以通过 HTTP 动词调用控制器操作,如下所示:
public class WebDavController : Controller
{
    [HttpGet]
    [Route("/dav/{fileName}")]
    public IActionResult Get(string fileName)
    {
        // a classic Get method
        ....
    }

    [Route("/dav/{fileName}")]
    public IActionResult Propfind(string fileName)
    {
        // this is invoked if http verb is PROPFIND 
        // (framework searches for corresponding action name)
        ....
    }

    [AcceptVerbs("LOCK")]
    [Route("/dav/{fileName}")]
    public IActionResult MyLockAction(string fileName)
    {
        // this is invoked if http verb is LOCK
        // (framework searches annotated action method)
        ....
    }

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接