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

Ral*_*ing 3 asp.net-core-mvc asp.net-core

我正在寻找如何使用更奇特的 HTTP 动词(例如 ASP.NET Core 或 ASP.NET Core MVC)处理请求的实现PROPFIND选项MKCOL

在 ASP.NET Core MVC 中,你可以用以下方式装饰你的操作方法

[HttpGet]
[HttpPut]
[HttpPost]
[HttpDelete]
[HttpHead]
[HttpOptions]
[HttpPatch]
Run Code Online (Sandbox Code Playgroud)

对于 REST API 或 Web 应用程序,这些 HTTP 动词就足够了。例如,对于 WebDavPROPFINDMKCOL动词也必须以某种方式处理。

是否有可能扩展 ASP.NET Core MVC 以支持比上面列出的更多的 HTTP 动词?或者您认为编写自己的中间件组件是将 WebDav 功能添加到 ASP.NET Core 应用程序的更好方法吗?

我研究了 ASP.NET Core 源代码存储库以获得一些想法。但我被困在当下。

Ral*_*ing 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)
        ....
    }

}
Run Code Online (Sandbox Code Playgroud)