[英]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.