1. 为了测试先做一个简单的webapi,直接用新建项目时默认的就可以了。

  2.  

    在浏览器中测试request get,得到结果

  3.  

    然后再项目中新建一个AjaxOnly的类

  4.  

    AjaxOnly继承ActionFilterAttribute,代码如下

    public class AjaxOnlyAttribute : ActionFilterAttribute

    {

    public override void OnActionExecuting(HttpActionContext filterContext)

    {

    var request = filterContext.Request;

    var headers = request.Headers;

    if (!headers.Contains("X-Requested-With")

    || headers.GetValues("X-Requested-With").FirstOrDefault() != "XMLHttpRequest")

    {

    throw new InvalidOperationException("This operation can only be accessed via Ajax requests");

    }

    else {

    base.OnActionExecuting(filterContext);

    }

    }

    }

    其中 if (!headers.Contains("X-Requested-With")

    || headers.GetValues("X-Requested-With").FirstOrDefault() != "XMLHttpRequest") 就是判断它是不是ajax请求,如果true则说明不是

    如果是controller的话可以用HttpContext.Request.IsAjaxRequest()来判断,webapi的actionContext中不支持IsAjaxRequest

  5.  

    把filter加在webapi的get方法上

  6.  

    然后再通过浏览器查看,得到报错。如果是ajax则会返回正常的结果。

  7.  

    可以把这个filter注册在global下,那每一个webapi都只能通过ajax访问

    GlobalConfiguration.Configuration.Filters.Add(new AjaxOnlyAttribute());

    END

让webapi只接受ajax请求的更多相关文章

  1. Controller 的 Action 只接受 Ajax 请求

    ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求. 2014-08-27 14:19 by h82258652, 555 阅读, 2 评论, 收藏, 编辑 首 ...

  2. 使用Attribute限制Action只接受Ajax请求

    原博文 https://www.cnblogs.com/h82258652/p/3939365.html 代码 /// <summary> /// 仅允许Ajax操作 /// </s ...

  3. ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求。

    首先,ajax 请求跟一般的 web 请求本质是相同的,都是 http 请求.理论上服务器端是无法区分该次请求是不是 ajax 请求的,但是,既然标题都已经说了,那么肯定是有办法做的. 在 ajax ...

  4. 如何判断一个请求为ajax请求?

    AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和XML). ajax的请求头如下: 如上图所示具有“X-Request-With”属性,该 ...

  5. C#中缓存的使用 ajax请求基于restFul的WebApi(post、get、delete、put) 让 .NET 更方便的导入导出 Excel .net core api +swagger(一个简单的入门demo 使用codefirst+mysql) C# 位运算详解 c# 交错数组 c# 数组协变 C# 添加Excel表单控件(Form Controls) C#串口通信程序

    C#中缓存的使用   缓存的概念及优缺点在这里就不多做介绍,主要介绍一下使用的方法. 1.在ASP.NET中页面缓存的使用方法简单,只需要在aspx页的顶部加上一句声明即可:  <%@ Outp ...

  6. ajax请求基于restFul的WebApi(post、get、delete、put)

    近日逛招聘软件,看到部分企业都要求会编写.请求restFul的webapi.正巧这段时间较为清闲,于是乎打开vs准备开撸. 1.何为restFul? restFul是符合rest架构风格的网络API接 ...

  7. 利用闭包实现多次ajax请求只执行最后一次

    点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待.我们知道一般我们用ajax是异步请求,那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能 ...

  8. WebApi(四)-Post接口请求失败或接受不到参数(解决方法)

    post方式只能接受一个参数而且必须用FromBody特性标识,所以当没有使用FromBody特性标识的时候就会请求失败,如有添加添加了那访问接口时候参数应传对象不能是key:val的格式否则会接收到 ...

  9. springmvc中只接受固定提交内容类型的请求

    springmvc中的@RequestMapping注解是用来处理请求地址映射的,如果某个接口我们只接受请求的提交内容类型(Content-Type)为application/json或text/ht ...

随机推荐

  1. js学习笔记-编写高效、规范的js代码-Tom

    编写高效.规范的js代码: 1.变量命名空间问题,尽量使用局部变量,防止命名冲突(污染作用域中的全局变量):全局空间命名的变量可以在对应的文档域任意位置中使用window调用. 2.尽量使用单var定 ...

  2. TortoiseSvn

    TortoiseSVN 是svn版本控制系统的一个免费开源客户端,它是svn版本控制的 Windows 扩展.可以使你避免使用枯燥而且不方便的命令行.它完全嵌入 Windows Explorer,使用 ...

  3. 【服务器环境搭建-Centos】常用系统命令篇

    uname -a 查看系统信息

  4. yum的使用及配置

    yum的使用及配置 文章来源:http://www.ilanni.com/?p=9032 最近由于服务器需求,需要在公司内网搭建内网yum源. 搭建内网yum源需要分以下几个步骤,如下: 1. yum ...

  5. nosql简述

    1.NoSQL数据库概念 NoSQL数据库是非关系型数据库,主要是针对关系型数据库而言,它主要是用来解决半结构化数据和非机构化数据的存储问题. 2.为什么使用NoSQL数据库? (1)对数据库的高并发 ...

  6. python网络编程socket之多线程

    #coding:utf-8 __author__ = 'similarface' import os,socket,threading,SocketServer SERVER_HOST='localh ...

  7. Lecture Notes: Macros

    原论文链接失效,特在这里保存一份 http://www.apl.jhu.edu/~hall/Lisp-Notes/Macros.html Lisp functions take Lisp values ...

  8. JQUERY学习(贰)

    一.操作一组jQuery对象 1.遍历 $("").each(fun); 2.求长度:length   size() 3.获得某一个jQuery对象 $("") ...

  9. PHP 启动 cURL模块以及启动失败的解决方案

    配置方法: php_curl.dll libeay32.dll ssleay32.dll php5ts.dll 复制到 %windir%/system32 以及php 目录的ext目录 下 并且找到p ...

  10. hive数据库的一些应用

    1.创建表格create table usr_info(mob string,reason string,tag string) row format delimited fields termina ...