33 lines
1.2 KiB
C#
33 lines
1.2 KiB
C#
using Microsoft.AspNetCore.Mvc.Abstractions;
|
|
using Microsoft.AspNetCore.Mvc.ActionConstraints;
|
|
|
|
namespace RobotNet.IdentityServer.Helpers;
|
|
|
|
public sealed class FormValueRequiredAttribute(string name) : ActionMethodSelectorAttribute
|
|
{
|
|
private readonly string _name = name;
|
|
|
|
public override bool IsValidForRequest(RouteContext context, ActionDescriptor action)
|
|
{
|
|
if (string.Equals(context.HttpContext.Request.Method, "GET", StringComparison.OrdinalIgnoreCase) ||
|
|
string.Equals(context.HttpContext.Request.Method, "HEAD", StringComparison.OrdinalIgnoreCase) ||
|
|
string.Equals(context.HttpContext.Request.Method, "DELETE", StringComparison.OrdinalIgnoreCase) ||
|
|
string.Equals(context.HttpContext.Request.Method, "TRACE", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (string.IsNullOrEmpty(context.HttpContext.Request.ContentType))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
if (!context.HttpContext.Request.ContentType.StartsWith("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
return false;
|
|
}
|
|
|
|
return !string.IsNullOrEmpty(context.HttpContext.Request.Form[_name]);
|
|
}
|
|
}
|