tnblog
首页
登录

.net core 通过不同Accept访问同方法请求不同方法处理

79人阅读 2019/10/30 16:04 总访问:10950 评论:0 手机 收藏
分类: .net后台框架


1.对于自定义的Accept需要进行注册

比如我这里的 application/vnd.cgzl.hateoas+json


services.AddMvc(option =>
{
    option.ReturnHttpNotAcceptable = true;
    //option.OutputFormatters.Add(new XmlDataContractSerializerOutputFormatter());
    #region 注册请求的media type商业类型
    var outputFormatter = option.OutputFormatters.OfType<JsonOutputFormatter>().FirstOrDefault();
    if (outputFormatter != null)
    {
        outputFormatter.SupportedMediaTypes.Add("application/vnd.cgzl.hateoas+json");
    }
    #endregion
}).AddJsonOptions(options=> {
    //输出小写
    options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});


2.写验证特性

RequestHeaderMatchingMediaTypeAttribute.cs

[AttributeUsage(AttributeTargets.All, Inherited = true, AllowMultiple = true)]
public class RequestHeaderMatchingMediaTypeAttribute : Attribute, IActionConstraint
{
    private readonly string _requestHeaderToMatch;
    private readonly string[] _mediaTypes;

    /// <summary>
    /// 
    /// </summary>
    /// <param name="requestHeaderToMatch"> 请求头部的类型 </param>
    /// <param name="mediaTypes"> mediaTypes类型 </param>
    public RequestHeaderMatchingMediaTypeAttribute(string requestHeaderToMatch, string[] mediaTypes)
    {
        _requestHeaderToMatch = requestHeaderToMatch;
        _mediaTypes = mediaTypes;
    }

    /// <summary>
    /// 如果请求的Header包含该枚举类型就算通过
    /// </summary>
    /// <param name="context"></param>
    /// <returns></returns>
    public bool Accept(ActionConstraintContext context)
    {
        var requestHeaders = context.RouteContext.HttpContext.Request.Headers;
        if (!requestHeaders.ContainsKey(_requestHeaderToMatch))
        {
            return false;
        }

        foreach (var mediaType in _mediaTypes)
        {
            var mediaTypeMatches = string.Equals(requestHeaders[_requestHeaderToMatch].ToString(),
                mediaType, StringComparison.OrdinalIgnoreCase);
            if (mediaTypeMatches)
            {
                return true;
            }
        }

        return false;
    }

    public int Order { get; } = 0;
}

Result:

评价
有钱人的开发有着你们不懂的快乐!O(* ̄︶ ̄*)O
排名
6
文章
6
粉丝
16
评论
8
{{item.ArticleTitle}}
{{item.BlogName}} : {{item.Content}}