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. centos7 php7 安装composer时Failed to decode zlib stream解决办法

    1 下载安装脚本 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" 2 运行安装脚 ...

  2. PHP中file_put_contents追加和换行

    在PHP的一些应用中需要写日志或者记录一些信息,这样的话.可以使用fopen(),fwrite()以及 fclose()这些进行操作.也可以简单的使用file_get_contents()和file_ ...

  3. 关于时区的时间的详解,比如UTC\GMT等

    UTC 和 GMT 及 北京时间的关系 UTC和GMT,这两者几乎是同一概念.它们都是指的格林尼治标准时间,只不过UTC的称呼更为正式一点.两者的区别在于前者是一个天文 上的概念,而 后者是基于一个原 ...

  4. 原创: 开题报告中摘要部分快速将一段文字插入到word的表格中

    开题报告的摘要是表格形式,之前需要一个一个字的敲入,十分不方便修改. 所以百度了一下方法.现总结如下: 达到的效果 1 将这段文字复制粘贴到word中,在word文件中的每一个字与字之间插入空格.如何 ...

  5. python 集合

    面向对象的集合: #coding:utf-8 __author__ = 'similarface' class Set: ''' list实现集合,及其集合操作 ''' def __init__(se ...

  6. LinuxShell脚本攻略--第六章 B计划

    tar -A或--catenate:新增文件到以存在的备份文件: -B:设置区块大小: -c或--create:建立新的备份文件: -C <目录>:这个选项用在解压缩,若要在特定目录解压缩 ...

  7. LF will be replaced by CRLF in git add

    git add 出现这样的提示: LF will be replaced by CRLF in qinqiu.txt. 这个时候要: $ rm -rf .git  // 删除.git $ git co ...

  8. 【bzoj1041】圆上的整点

    题意 给定一个圆\(x^2+y^2=z^2\),求圆周上有多少个点的坐标是整数. \(r\leq 2*10^9\) 分析 这道题目关键要知道一些勾股数的性质,剩下的就很好处理了. 勾股数的性质 参考: ...

  9. 理论与实践中的 C# 内存模型

    转载自:https://msdn.microsoft.com/magazine/jj863136 这是该系列(包含两部分内容)的第一部分,这部分将以较长的篇幅介绍 C# 内存模型. 第一部分说明 C# ...

  10. php Composer 报ssl证书错误

    CA证书下载地址:http://curl.haxx.se/docs/caextract.html 修改php.ini文件 openssl.cafile= D:/wamp/php/verify/cace ...