我正在寻找实现选项如何使用ASP.NET Core或ASP.NET Core MVC处理具有更多异国情调的HTTP谓词的请求,例如PROPFIND
或MKCOL
。
在ASP.NET Core MVC中,您可以使用
修饰操作方法[HttpGet]
[HttpPut]
[HttpPost]
[HttpDelete]
[HttpHead]
[HttpOptions]
[HttpPatch]
对于REST API或Web应用程序,这些HTTP谓词就足够了。对于WebDav,例如PROPFIND
或MKCOL
动词也必须以某种方式处理。
是否有可能扩展ASP.NET Core MVC以支持比上面列出的更多的HTTP动词? 或者您认为编写自己的中间件组件是将WebDav功能添加到ASP.NET Core应用程序的更好方法吗?
我已经查看了ASP.NET核心源代码库以获得一些想法。但我现在陷入困境。
答案 0 :(得分:1)
解决方案比我想象的要容易。您可以通过HTTP动词调用Controller Actions(如
)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)
....
}
}