ajax 跨域webapi 最简单的demo(只介绍Get)
这几天遇到一个nodejs的项目,使用VSCode开发,需要连接数据库的,但是用nodejs连接数据库比较繁琐,需要安装很多东西,本人也懒得去研究了。后来想到建一个WebAPI然后用ajax来调用,避免使用nodejs直接和数据库打交道。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
首先介绍webapi怎么搞
1.在ASP.net MVC Web 下选择WebAPI模板 建立项目
2.在项目根目录新建一个类(用来解决跨域的问题)
内容如下:
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Web;
- using System.Web.Http.Filters;
- namespace xxxService
- {
- public class CrossSiteAttribute : System.Web.Http.Filters.ActionFilterAttribute
- {
- private const string Origin = "Origin";
- /// <summary>
- /// Access-Control-Allow-Origin是HTML5中定义的一种服务器端返回Response header,用来解决资源(比如字体)的跨域权限问题。
- /// </summary>
- private const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
- /// <summary>
- /// originHeaderdefault的值可以使 URL 或 *,如果是 URL 则只会允许来自该 URL 的请求,* 则允许任何域的请求
- /// </summary>
- ///
- //private const string originHeaderdefault = "http://192.168.13.7:8002" ;
- private const string originHeaderdefault = "*";
- /// <summary>
- /// 该方法允许api支持跨域调用
- /// </summary>
- /// <param name="actionExecutedContext"> 初始化 System.Web.Http.Filters.HttpActionExecutedContext 类的新实例。</param>
- public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
- {
- actionExecutedContext.Response.Headers.Add(AccessControlAllowOrigin, originHeaderdefault);
- }
- }
- }
3.在controller下新建一个StringsController.cs 在调用api的时候得到的数据就是这边reurn的数据
内容如下:([CrossSite]不能少,用以解决跨域的问题)
- using xxxService.Models;
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Net;
- using System.Net.Http;
- using System.Web.Http;
- namespace xxxService.Controllers
- {
- public class StringsController : ApiController
- {
- [CrossSite]
- public DataTable Get(string CultureName, string ProjectName)
- {
- object[] Params = new object[];
- Params[] = ProjectName;
- Params[] = CultureName;
- DbHelper DBH = new DbHelper();
- DataTable result = DBH.ExecuteDataTable("usp_GetPluralStingByProjectAndLanguage", Params);
- return result;
- }
- }
- }
番外:
这边return的result 是DataTable类型的,在用ajax跨域调用的时候会不成功(在同一台机器上是成功的,但是部署到服务器上就会失败,确认是返回这个类型的原因),可能是解析错误的问题,所以返回的时候可以对datatable处理之后再返回,例如:
- DataTable tables = DBH.ExecuteDataTable("usp_GetPluralStingByProjectAndLanguage", Params);
- foreach (DataRow row in tables.Rows)
- {
- result.CultureName = row[].ToString();
- result.Translation = row[].ToString();
- result.SourceString = row[].ToString();
- result.ResourceID = row[].ToString();
- result.ProjectName = row[].ToString();
- results.Add(result);
- }
这是后来补充的,和本篇文章关联不大
4.为了给一个简单的效果图,我新建了一个NamesController.cs,和上面的其实一样
内容如下:
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Net;
- using System.Net.Http;
- using System.Web.Http;
- using xxxService.Models;
- namespace xxxService.Controllers
- {
- public class NamesController : ApiController
- {
- [CrossSite]
- public string Get()
- {
- return "zhangsan";
- }
- }
- }
访问该api: http://localhost:59579/api/names/get
就此api的编写完成(都是最简单的例子)
5.ajax调用,在另一个项目中引入jquery
添加如下代码:
- $.ajax({
- type: 'GET',
- url: 'http://localhost:59579/api/strings/get',
- dataType: 'JSON',
- data:{
- CultureName:cultureName,
- ProjectName:projectName
- },
- success: function (data) {
- DrawTable(data);
- layer.closeAll('loading');
- }
- });
如有不清楚参照:https://www.cnblogs.com/Leo_wl/p/4780650.html 这个写的比较好
ajax 跨域webapi 最简单的demo(只介绍Get)的更多相关文章
- web api 跨域请求,ajax跨域调用webapi
1.跨域问题仅仅发生在Javascript发起AJAX调用,或者Silverlight发起服务调用时,其根本原因是因为浏览器对于这两种请求,所给予的权限是较低的,通常只允许调用本域中的资源,除非目标服 ...
- WebApi 自定义过滤器实现支持AJAX跨域的请求
我想关于此类话题的文章,大家一搜铺天盖地都是,我写此文的目的,只是对自己学习过程的记录,能对需要的朋友有所帮助,也百感荣幸!!!废话不多说,直接上代码! 客户端:很简单的AJAX请求 <html ...
- AJAX跨域调用ASP.NET MVC或者WebAPI服务
关于AJAX跨域调用ASP.NET MVC或者WebAPI服务的问题及解决方案 作者:陈希章 时间:2014-7-3 问题描述 当跨域(cross domain)调用ASP.NET MVC或者ASP. ...
- js便签笔记(13)——jsonp其实很简单【ajax跨域请求】
前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资料,原来如此... 为何一直知道jsonp,但一直迷迷糊糊的不明白 ...
- jsonp其实很简单【ajax跨域请求】
js便签笔记(13)——jsonp其实很简单[ajax跨域请求] 前两天被问到ajax跨域如何解决,还真被问住了,光知道有个什么jsonp,迷迷糊糊的没有说上来.抱着有问题必须解决的态度,我看了许多资 ...
- Ajax跨域问题及解决方案 asp.net core 系列之允许跨越访问(Enable Cross-Origin Requests:CORS) c#中的Cache缓存技术 C#中的Cookie C#串口扫描枪的简单实现 c#Socket服务器与客户端的开发(2)
Ajax跨域问题及解决方案 目录 复现Ajax跨域问题 Ajax跨域介绍 Ajax跨域解决方案 一. 在服务端添加响应头Access-Control-Allow-Origin 二. 使用JSONP ...
- 简单ajax跨域请求
最近遇到需要ajax跨域的需求 首先看下不做任何处理特别处理的ajax跨域请求会出现什么样的错误 客户端代码: <script type="text/javascript"& ...
- 浅谈linux 下,利用Nginx服务器代理实现ajax跨域请求。
ajax跨域请求对于前端开发者几乎在任何一个项目中都会用到,众所周知,跨域请求有三种方式: jsonp; XHR2 代理: jsonp: 这种应该是开发中是使用的最多的,最常见的跨域请求方法,其实aj ...
- Ajaxadr ajax跨域请求crossdomain
最近工作需要用到ajax跨域请求参数,网上找很很久,最终得到解决之道.分享一下吧,希望能帮到各位 也许你已经发现在浏览器直接敲路径能获得对方提供接口的参数,而一到项目中Ajax请求却老是失败.原因是, ...
随机推荐
- Docker 镜像文件的导入和导出
使用save命令 保存镜像 docker save -o name_by_you.tar exist_images 将文件copy到另一台机器 使用load命令将镜像文件保存到本地仓库 docker ...
- VS 右键属性闪一下啥也打不开问题
unity项目,从vs项目右键属性闪一下啥也打不开的问题这个是因为工程是unity管理的,里面有个插件默认设定不可查看修改属性修改:vs中打开“工程”->"选项"中(修改后这 ...
- 创建Git本地仓库
一.获取Git仓库 安装好Git后即可创建Git本地仓库,开始项目的版本管理.有两种方法取得Git项目仓库:1.在现有项目或目录下导入所有文件到Git中:2.从一个服务器克隆一个现有的Git仓库. 1 ...
- 关于syx的npy
请认准官方女友----- STL 任何人在不得syx同意下不能传播其它谣言
- 08 SSM整合案例(企业权限管理系统):07.订单操作
04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.用户操作 09.权限控制 10.权限关联与控制 11.AOP日志 07.订单操作 SSM订单操作 ...
- HDU1880 魔咒词典
题目大意:对应的输入多行,每行两个字符串,两个字符串互相映射.接下来询问的时候,如果这个字符串出现过,输出其对应的字符串. 分析:二重哈希来判断字符串是否存在,输出其对应的字符串就行.二重哈希的入门题 ...
- python isinstance()判断数据类型
举例: d = (1,2,3) print(isinstance(d,int)) #False print(isinstance(d,tuple)) #True print(isinstance(d, ...
- Excel的查询函数vlookup和index使用
需求 有一些省市的区县,有600多条数据,只有名称,没有编码.现在要根据名称去3000多条数据里面查询. 如图,拿出一部分数据来演示 vlookup 使用vlookup,由于vlookup只能查询数据 ...
- DirectX9完全面向对象框架
#pragma once #define UNICODE //Direct3D lib #include<d3d9.h> #include<d3dx9.h> #pragma c ...
- LeetCode874 模拟行走机器人(简单模拟—Java之HashSet简单应用)
题目: 机器人在一个无限大小的网格上行走,从点 (0, 0) 处开始出发,面向北方.该机器人可以接收以下三种类型的命令: -2:向左转 90 度-1:向右转 90 度1 <= x <= 9 ...