2016-09-05 40 views
0

我正在寻找实现选项,以便如何使用更具异国情调的HTTP动词(如PROPFINDMKCOL)与ASP.NET Core或ASP.NET Core MVC处理请求。如何在ASP.NET Core中处理PROPFIND HTTP Verb请求(或其他)?

在ASP.NET 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 Source Repositories以获得一些想法。但是我陷入了困境。

回答

1

解决方案比我想象的要容易。你可以通过这样的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) 
     .... 
    } 

}