簡體   English   中英

在ASP.net核心中創建自定義驗證屬性

[英]create custom validation attribute in ASP.net core

我想使用屬性來確保請求中存在某些標頭。 這不是授權屬性。 用例之一是當接收到請求時,我要確保為舊客戶端提供X-Request-For標頭,可以正確處理。 還有其他用例,但是所有這些用例都會四處讀取特定的http標頭值,並在控制器負責之前采取適當的措施。

[MyAttribute(HeaderOptions.RequestFor)
[httpPost]
public MyMethod(string data) 
{
...
}

您可以使用MVC過濾器創建這樣的屬性。

例如,創建一個這樣的過濾器:

public class CheckHeaderFilter : Attribute, IResourceFilter
{
    private readonly string[] _headers;

    public CheckHeaderFilter(params string[] headers)
    {
        _headers = headers;
    }

    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        if (_headers == null) return;

        if (!_headers.All(h => context.HttpContext.Request.Headers.ContainsKey(h)))
        {
            //do whatever you need to do when check fails
            throw new Exception("Necessary HTTP headers not present!");

        }
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {

    }
}

然后在動作(或控制器)上使用它:

[CheckHeaderFilter(HeaderOptions.RequestFor)]
public IActionResult Index()
{
   ...
}

我強烈建議您通讀文檔,以便知道使用哪種類型的過濾器。 在此示例中,我使用了ResourceFilter,因為它在管道中處於早期階段(就在auth之后和模型綁定之前-這對您的情況而言很有意義)。

但是,根據您需要執行的操作,應使用適當的過濾器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM