让asp.net web api同时支持[AcceptVerbs("GET","POST")]

在使用第三方接口时,有时候会看到

public class FromUriOrBodyParameterBinding : HttpParameterBinding
    {
        HttpParameterBinding _defaultUriBinding;
        HttpParameterBinding _defaultFormatterBinding;

        public FromUriOrBodyParameterBinding(HttpParameterDescriptor desc)
            : base(desc)
        {
            _defaultUriBinding = new FromUriAttribute().GetBinding(desc);
            _defaultFormatterBinding = new FromBodyAttribute().GetBinding(desc);
        }

        public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
        {
            if (actionContext.Request.Content != null && actionContext.Request.Content.Headers.ContentLength > 0)
            {
                // we have something from the body, try that first
                return _defaultFormatterBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken);
            }
            else
            {
                // we need to read things from uri
                return _defaultUriBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken);
            }
        }

  

config.ParameterBindingRules.Insert(0, x =>
            {
                if (x.ParameterType == typeof(LoginModel))
                {
                    return new FromUriOrBodyParameterBinding(x);
                }
                return null;
            });

  

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Parameter, Inherited = true, AllowMultiple = false)]
    public sealed class FromUriOrBodyAttribute : ParameterBindingAttribute
    {
        public override HttpParameterBinding GetBinding(HttpParameterDescriptor parameter)
        {
            return new FromUriOrBodyParameterBinding(parameter);
        }

        public class FromUriOrBodyParameterBinding : HttpParameterBinding
        {
            HttpParameterBinding _defaultUriBinding;
            HttpParameterBinding _defaultFormatterBinding;

            public FromUriOrBodyParameterBinding(HttpParameterDescriptor desc)
                : base(desc)
            {
                _defaultUriBinding = new FromUriAttribute().GetBinding(desc);
                _defaultFormatterBinding = new FromBodyAttribute().GetBinding(desc);
            }

            public override Task ExecuteBindingAsync(ModelMetadataProvider metadataProvider, HttpActionContext actionContext, CancellationToken cancellationToken)
            {
                if (actionContext.Request.Content != null && actionContext.Request.Content.Headers.ContentLength > 0)
                {
                    // we have something from the body, try that first
                    return _defaultFormatterBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken);
                }
                else
                {
                    // we need to read things from uri
                    return _defaultUriBinding.ExecuteBindingAsync(metadataProvider, actionContext, cancellationToken);
                }
            }

        }
    }

  

[AcceptVerbs("GET","POST")]
        public IHttpActionResult Login([FromUriOrBody]LoginModel login)
        {
            return Ok(login);
        }

  

时间: 2024-10-10 04:16:00

让asp.net web api同时支持[AcceptVerbs("GET","POST")]的相关文章

Asp.Net Web API 2第十八课——Working with Entity Relations in OData

前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html. 本文的示例代码的下载地址为http://pan.baidu.com/s/1o6lqXN8 大多数的数据集定义实体间的关系:客户有订单.书籍有作者.产品有供应商.客户端可以使用OData操作实体间的关系.给定一个产品,你可以找到该产品的供应商.您也可以创建或者删除关系.例如,您也可以为一个产品设置一个供应商. 本教程将会展示

Asp.Net Web API 2第十二课——Media Formatters媒体格式化器

前言 阅读本文之前,您也可以到Asp.Net Web API 2 系列导航进行查看 http://www.cnblogs.com/aehyok/p/3446289.html 本教程演示如何在ASP.NET Web API中支持额外的媒体格式. Internet Media Types——Internet的媒体类型 媒体类型,也叫做MIME类型,标识了一片数据的格式.在HTTP中,媒体类型描述了消息体的格式.一个媒体类型由两个字符串组成:类型和子类型.例如: text/html image/png

【ASP.NET Web API教程】6.1 媒体格式化器

http://www.cnblogs.com/r01cn/archive/2013/05/17/3083400.html 6.1 Media Formatters6.1 媒体格式化器 本文引自:http://www.asp.net/web-api/overview/formats-and-model-binding/media-formatters By Mike Wasson|March 8, 2012作者:Mike Wasson|日期:2012-3-8 This tutorial shows

ASP.NET Web API 2.1支持Binary JSON(Bson)

ASP.NET Web API 2.1内建支持XML.Json.Bson.form-urlencoded的MiME type,今天重点介绍下Bson. BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,是MongoDB的数据存储格式.BSON基于JSON格式,选择JSON进行改造的原因主要是JSON的通用性及JSON的schemaless的特性. BSON主要会实现以下三点目标: 1.更快的遍历速度 对JSON格式来说,太大的JSON结构会导致数据遍历非常慢.在JSON中,

通过微软的cors类库,让ASP.NET Web API 支持 CORS

前言:因为公司项目需要搭建一个Web API 的后端,用来传输一些数据以及文件,之前有听过Web API的相关说明,但是真正实现的时候,感觉还是需要挺多知识的,正好今天有空,整理一下这周关于解决CORS的问题,让自己理一理相关的知识. ASP.NET Web API支持CORS方式,据我目前在网上搜索,有两种方式 通过扩展CorsMessageHandle实现:             http://www.cnblogs.com/artech/p/cors-4-asp-net-web-api-

如何让你的 Asp.Net Web Api 接口,拥抱支持跨域访问。

由于 web api 项目通常是被做成了一个独立站点,来提供数据,在做web api 项目的时候,不免前端会遇到跨域访问接口的问题. 刚开始没做任何处理,用jsonp的方式调用 web api 接口,总是报一个错误,如下: 如果你想用JSONP来获得跨域的数据,WebAPI本身是不支持javascript的callback的,它返回的JSON是这样的: {"YourSignature":"嫁人要嫁程序员,钱多话少死得早"} 然而,JSONP请求期望得到这样的JSON

ASP.NET Web API 2 对 CORS 的支持

CORS概念 跨域资源共享 (CORS) 是一种万维网联合会 (W3C) 规范(通常被认为是 HTML5 的一部分),它可让 JavaScript 克服由浏览器施加的同域策略安全限制. 所谓同域策略,就是 JavaScript 只能对包含网页的同一个域进行 AJAX 回调(其中,“域”就是主机名.协议和端口号的组合). 例如,http://foo.com 中某个网页上的 JavaScript 无法对 http://bar.com(或 http://www.foo.com.https://foo.

[转]ASP.NET Web API对OData的支持

http://www.cnblogs.com/shanyou/archive/2013/06/11/3131583.html 在SOA的世界中,最重要的一个概念就是契约(contract).在云计算的世界中,有关通信的最重要的概念也是契约.XML具有强大对数据的描述能力,Atom格式和AtomPub都建立在XML之上,在Google和微软的推动下,也已经成为标准.但是,Atom/AtomPub和ODBC/OLEDB这样的真正数据交互协议相比较,还有着根本上的欠缺:缺乏数据类型的具体描述,降低了交

支持Ajax跨域访问ASP.NET Web Api 2(Cors)的简单示例教程演示

随着深入使用ASP.NET Web Api,我们可能会在项目中考虑将前端的业务分得更细.比如前端项目使用Angularjs的框架来做UI,而数据则由另一个Web Api 的网站项目来支撑.注意,这里是两个Web网站项目了,前端项目主要负责界面的呈现和一些前端的相应业务逻辑处理,而Web Api则负责提供数据. 这样问题就来了,如果前端通过ajax访问Web Api项目话,就涉及到跨域了.我们知道,如果直接访问,正常情况下Web Api是不允许这样做的,这涉及到安全问题.所以,今天我们这篇文章的主