让webapi只接受ajax请求
为了测试先做一个简单的webapi,直接用新建项目时默认的就可以了。

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

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

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

把filter加在webapi的get方法上

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

可以把这个filter注册在global下,那每一个webapi都只能通过ajax访问
GlobalConfiguration.Configuration.Filters.Add(new AjaxOnlyAttribute());
END
让webapi只接受ajax请求的更多相关文章
- Controller 的 Action 只接受 Ajax 请求
ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求. 2014-08-27 14:19 by h82258652, 555 阅读, 2 评论, 收藏, 编辑 首 ...
- 使用Attribute限制Action只接受Ajax请求
原博文 https://www.cnblogs.com/h82258652/p/3939365.html 代码 /// <summary> /// 仅允许Ajax操作 /// </s ...
- ASP.NET MVC 使 Controller 的 Action 只接受 Ajax 请求。
首先,ajax 请求跟一般的 web 请求本质是相同的,都是 http 请求.理论上服务器端是无法区分该次请求是不是 ajax 请求的,但是,既然标题都已经说了,那么肯定是有办法做的. 在 ajax ...
- 如何判断一个请求为ajax请求?
AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和XML). ajax的请求头如下: 如上图所示具有“X-Request-With”属性,该 ...
- 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 ...
- ajax请求基于restFul的WebApi(post、get、delete、put)
近日逛招聘软件,看到部分企业都要求会编写.请求restFul的webapi.正巧这段时间较为清闲,于是乎打开vs准备开撸. 1.何为restFul? restFul是符合rest架构风格的网络API接 ...
- 利用闭包实现多次ajax请求只执行最后一次
点一个按钮,则向服务器请求资源,不作处理时,多次点击后会有很多个请求在等待.我们知道一般我们用ajax是异步请求,那么我们快速重复点击一个按钮得到的结果其实我们并不知道是哪次点击的结果可能是第一次可能 ...
- WebApi(四)-Post接口请求失败或接受不到参数(解决方法)
post方式只能接受一个参数而且必须用FromBody特性标识,所以当没有使用FromBody特性标识的时候就会请求失败,如有添加添加了那访问接口时候参数应传对象不能是key:val的格式否则会接收到 ...
- springmvc中只接受固定提交内容类型的请求
springmvc中的@RequestMapping注解是用来处理请求地址映射的,如果某个接口我们只接受请求的提交内容类型(Content-Type)为application/json或text/ht ...
随机推荐
- activity去标题栏操作&保留高版本主题
方式一:每个类都需要去添加此代码 在setContentView(R.layout.activity_splash); 前设置以下代码 requestWindowFeature(Window.FEAT ...
- 图形处理的api
[1]旋转 public class MainActivity extends Activity { private float degrees;// 图片旋转的角度 @Override ...
- Handler知识点详解
Handler是在多线程之间使用的,用于线程之间进行通信. 要想知道为什么需要Handler就首先说明android的主线程和工作线程. 主线程又称为UI线程.正是因为在android中,所有与UI有 ...
- HashMap遍历
package com.jackey.topic; import java.util.ArrayList;import java.util.HashMap;import java.util.Itera ...
- C#_加密解密
一.MD5加密解密 1.加密 public static string ToMd5(string clearString) { Byte[] clearBytes = System.Text.Enco ...
- 闹钟--alarmManager
1.AlarmManager,顾名思义,就是“提醒”,是Android中 常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来 时 ...
- iOS开发 判断字符串是不是网址
- (BOOL)isUrlString { NSString *emailRegex = @"[a-zA-z]+://.*"; NSPredicate *emailTest = [ ...
- SVM中图像常用的HOG特征描述及实现
转摘网址:http://www.cnblogs.com/tiandsp/archive/2013/05/24/3097503.html Hog参考网址:http://www.cnblogs.com/t ...
- 小div在大div中垂直居中,以及div在页面垂直居中
<html> <head> <title>淘宝 2faner</title> <style type="text/css"&g ...
- js生成验证码
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...