• ASP.NET API盘点


    1.控制只返回JSON一种数据

            public class JsonContentNegotiator : IContentNegotiator
            {
                private readonly JsonMediaTypeFormatter _jsonFormatter;
                public JsonContentNegotiator(JsonMediaTypeFormatter formatter)
                {
                    _jsonFormatter = formatter;
                }
                public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters)
                {
                    var result = new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json"));
                    return result;
                }
            }

    使用:在WebApiConfig.cs中

     public static void Register(HttpConfiguration config)
            {
                config.Routes.MapHttpRoute(
                    name: "DefaultApi",
                    routeTemplate: "api/{controller}/{action}",
                    defaults: new { id = RouteParameter.Optional }
                );
    
                // 取消注释下面的代码行可对具有 IQueryable 或 IQueryable<T> 返回类型的操作启用查询支持。
                // 若要避免处理意外查询或恶意查询,请使用 QueryableAttribute 上的验证设置来验证传入查询。
                // 有关详细信息,请访问 http://go.microsoft.com/fwlink/?LinkId=279712//config.EnableQuerySupport();
    
                // 若要在应用程序中禁用跟踪,请注释掉或删除以下代码行
                // 有关详细信息,请参阅: http://www.asp.net/web-api
                config.EnableSystemDiagnosticsTracing();
    
    
                var jsonFormatter = new JsonMediaTypeFormatter();
                //optional: set serializer settings here
                config.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter));
            }

    2.支持跨域POST,网上很多都是.net 4.5的,找了好久才找到.net 4.0的方法

    public class CorsHandler : DelegatingHandler
            {
                const string Origin = "Origin";
                const string AccessControlRequestMethod = "Access-Control-Request-Method";
                const string AccessControlRequestHeaders = "Access-Control-Request-Headers";
                const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
                const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
                const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";
    
                protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
                {
                    bool isCorsRequest = request.Headers.Contains(Origin);
                    bool isPreflightRequest = request.Method == HttpMethod.Options;
                    if (isCorsRequest)
                    {
                        if (isPreflightRequest)
                        {
                            return Task.Factory.StartNew<HttpResponseMessage>(() =>
                            {
                                HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
                                response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
    
                                string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
                                if (accessControlRequestMethod != null)
                                {
                                    response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);
                                }
    
                                string requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
                                if (!string.IsNullOrEmpty(requestedHeaders))
                                {
                                    response.Headers.Add(AccessControlAllowHeaders, requestedHeaders);
                                }
    
                                return response;
                            }, cancellationToken);
                        }
                        else
                        {
                            return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t =>
                            {
                                HttpResponseMessage resp = t.Result;
                                resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
                                return resp;
                            });
                        }
                    }
                    else
                    {
                        return base.SendAsync(request, cancellationToken);
                    }
                }
            }

    使用:在Global.asax中

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
    
                WebApiConfig.Register(GlobalConfiguration.Configuration);
                FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
                RouteConfig.RegisterRoutes(RouteTable.Routes);
                BundleConfig.RegisterBundles(BundleTable.Bundles);
    
                GlobalConfiguration.Configuration.MessageHandlers.Add(new CorsHandler());
    
                new GZFrameworkDBConfig();
            }
    慎于行,敏于思!GGGGGG
  • 相关阅读:
    Webstorm 下的Angular2.0开发之路
    利用hexo+github+nodejs搭建自我博客的一天
    滑稽的下午angularjs 2.0管道的使用
    DNGuard 标准版 v2.90发布
    DNGuard Enterprise v2.92 released
    C#复杂表达式的问题
    直接在.Net程序(C#)中执行 native code
    采用Native 引导方式的.Net加密保护
    DNGuard HVM Trial V2.82 发布
    DNGuard Enterprise v2.90 released
  • 原文地址:https://www.cnblogs.com/GarsonZhang/p/4570766.html
Copyright © 2020-2023  润新知