创建自定义 Http 方法

Create a custom Http method

是否可以通过覆盖 HttpMethodAttribute class 并指定我们自己的 supportedMethods 来创建我们自己的 HTTP 方法?

实际上,根据不同的情况,我们需要return View as complete view with the _Layout,有时我们只需要return 这个view的PartialView。所以我的想法是放置一个自定义属性,比如 [HttpPartial] 这样客户端会根据请求中使用的方法来判断它是想要完整视图(GET 方法)还是部分视图(PARTIAL 方法) .

相反,我会建议类似于 fiddler 的东西...

是的,APIs 是可能的。您可以 look at how the HttpGetAttribute is implemented,并为自定义方法推出自己的方法,将“get”替换为“foo”:

/// <summary>
/// Identifies an action that supports the HTTP FOO method.
/// </summary>
public class HttpFooAttribute : HttpMethodAttribute
{
    private static readonly IEnumerable<string> _supportedMethods = new[] { "FOO" };

    /// <summary>
    /// Creates a new <see cref="HttpFooAttribute"/>.
    /// </summary>
    public HttpFooAttribute()
        : base(_supportedMethods)
    {
    }

    /// <summary>
    /// Creates a new <see cref="HttpFooAttribute"/> with the given route template.
    /// </summary>
    /// <param name="template">The route template. May not be null.</param>
    public HttpFooAttribute(string template)
        : base(_supportedMethods, template)
    {
        if (template == null)
        {
            throw new ArgumentNullException(nameof(template));
        }
    }
}

然后将其应用于您的 API 操作方法:

[Route("Bar")]
public class BarApiController : Controller
{
    [HttpFoo("/"]
    public IActionResult Foo()
    {
        return Ok("Foo");
    }
}

现在您可以请求FOO https://your-api:44312/bar/

这对于返回视图的操作不太有用,因为 any HTML-rendering user agent only lets the user initiate GET or POST requests 通过超链接和表单。

您可以通过 XMLHttpRequestfetch() 发送更多方法,但需要更多文档和客户端自定义。

不要破坏或阻碍网络,不要为您的应用程序逻辑发明新的 HTTP 方法。只需使用查询字符串参数或将其发送到您的正文中:&renderAsPartial=true{ "renderAsPartial": true }.

有关如何注册新的 HTTP 方法,请参阅 the IANA's Hypertext Transfer Protocol (HTTP) Method Registry for existing methods and see RCF 7231 section 8.1