4 changed files with 43 additions and 21 deletions
@ -0,0 +1,33 @@ |
|||
using System; |
|||
using Microsoft.AspNetCore.Mvc.Abstractions; |
|||
using Microsoft.AspNetCore.Mvc.ActionConstraints; |
|||
using Microsoft.AspNetCore.Routing; |
|||
|
|||
namespace Mvc.Server.Helpers { |
|||
public sealed class FormValueRequiredAttribute : ActionMethodSelectorAttribute { |
|||
private readonly string _name; |
|||
|
|||
public FormValueRequiredAttribute(string name) { |
|||
_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]); |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue