武松娱乐 当前位置:首页>武松娱乐>正文

武松娱乐

发布时间:2019-04-19

原标题:【ASP.NET Core】根据 Content-Type 头部来筛选 Action

如遇【线上娱乐站】不能自动打开,请复制 http://da8.us 到浏览器,注册自动送8-88试 ̶̶̶̶̶̶̶̶̶̶玩 ̷̷̷̷̷̷̷̷̷̷金。体验各种类的线上PT/DT/MG/PNG ̶̶̶̶̶̶̶̶̶̶老 ̷̷̷̷̷̷̷̷̷̷虎 ̷̷̷̷̷̷̷̷̷̷机、 ̷̷̷̷̷̷̷̷̷̷真* ̷̷̷̷̷̷̷̷̷̷人* ̶̶̶̶̶̶̶̶̶̶百* ̶̶̶̶̶̶̶̶̶̶家 ̷̷̷̷̷̷̷̷̷̷*乐*游戏等免费试玩、优惠活动,7*24小时专业服务

“好了,天不早了,你还没吃饭吧,留下陪我一起吃点饭吧。”池语用商量的口吻问道。

优德88官方网站登录

在赤瞳说话的同时刘皓已经抽出了冰玄剑一道十米长的金色火焰剑芒从剑锋之上吞吐而出,当头劈下。
“我没兴趣听死人的话,也没兴趣知道你们想什么,我只知道我现在想你们死。”艾斯德斯知道绝对不能给敌人任何时间和机会,修道者手段层出不穷往往只是一两秒的时间就很可能让敌人使出翻盘的手段或者是让敌人走掉。

狼吃羊,人也吃羊啊。人视狼为威胁所以要防之、杀之,那不是为了救羊,而是要除了人之外不准其它动物染指羊。

在开始今天的吹牛节目之前,老周先说个破事:每周的周五或者周六,老周会在新浪直播平台(一直播同步)开播 ASP.NET Core 相关的内容。具体的直播时间老周会在微博上发布。直播是免费观看的,当然了,如果你钱多的话,也可以赞助老周几个欧元的。

好,进入今天的主题。留个悬念,老周不告诉你扯什么,先看一个例子。

    [Route("/api/[controller]/[action]")]
    public class DemoController : Controller
    {
        [ActionName("send"), HttpGet]
        public IActionResult Send_Ver1()
        {
            return Content("你访问的是版本 1 的接口,此接口提供给畜生使用。");
        }

        [ActionName("send")]
        [HttpGet]
        public IActionResult Send_Ver2()
        {
            return Content("你访问的是版本 2 的接口,该接口提供给人渣使用。");
        }
    }

这是一个控制器类,因为没有 View 返回,也可以认为是一个 Web API。

 

关键注意这两个 Attribute。

ActionName("send")
ActionName("send")

类中有两个方法,分别命名为 Send_Ver1 和 Send_Ver2,由于我在它们上面使用了 ActionNameAttribute,并且指定了这两个方法所公开的 Action 名字都叫 send。

 

如此一来,疑问就产生了,两个同名的 action ,应用程序在运行阶段该如何选择呢。

来,试试看。

电脑毕竟不是人脑,它不会思考的,所以,运行的时候应用程序是无法做出选择了。

 

一般真的开发的话,没有人这么干的,弄两个一样的 action 干屌,不过,为了接下来的演示,老周决定干一次屌。这个时如果你非得坚持使用两个同名 action ,那么,你可以通过客户端调用时传递的 content-type Header 来区别这两个 action。

于是,你可以对上面的代码做这样修改,应用一个 ConsumesAttribute 就好了,当然了,重点是你得指定 Content-Type。

    [Route("/api/[controller]/[action]")]
    public class DemoController : Controller
    {
        [ActionName("send"), HttpGet]
        [Consumes("application/pdf")]
        public IActionResult Send_Ver1()
        {
            ……
        }

        [ActionName("send")]
        [HttpGet]
        [Consumes("audio/DV")]
        public IActionResult Send_Ver2()
        {
            ……
        }
    }

这样改动之后,在发起请求时,如果指定 content-type 为 application/pdf,那么调用会进入 Send_Ver1 方法;如果请求时指定的 content-type 是 audio/DV,那么就会进入 Send_Ver2 方法。

这个 ConsumesAttribute 在实例化时,还可以指定多个 content-type。因为它有这样的构造函数。

public ConsumesAttribute(string contentType, params string[] otherContentTypes)

比如咱们这个示例,如果希望带 application/PDF 和 application/XML 的 Content-Type 都能进入 Send_Ver1 方法,那么你可以这么做。

        [Consumes("application/pdf", "application/xml")]
        public IActionResult Send_Ver1()
        {
            ……

}

 

现在咱们再来测试一下。

第一步,携带 content-type = application/pdf 调用 web api。

 

 第二步,把 Content-Type 改为 audio/DV,再发起一次请求。

 

第三步,把 Content-Type 改为 application/xml ,再试试。

 

 因为上面咱们指定了,application/pdf 和 application/xml 的 content type 都可以进入 Send_Ver1 方法,所以,第一步与第三步测试的结果相同。

 

好了,今天的吹牛节目完成了,下次老周与你继续扯。

 

编辑:戏海侯密

发布时间:2019-04-19 01:28:42

当前文章://%E4%BD%9B%E5%AE%B6%E7%BB%8F%E5%85%B8%E6%95%85%E4%BA%8B

亚洲城会员登录 神灯彩票登录注册登录 丰大彩票 必赢亚洲官网登录入口 一路发娱乐手机版 拉菲1娱乐 v博娱乐登录注册 必赢国际手机版 

责任编辑:乙徒通马

随机推荐