C#之浏览器请求跨域
来源:互联网 发布:java微商城源码下载 编辑:程序博客网 时间:2024/05/21 15:44
1 现象
需求:A项目的页面需要调用B项目的接口(接口项目)并获取响应的数据。
方法:所以在A项目的页面中使用AJAX直接调用对应的接口获取数据。
问题:浏览器使用AJAX请求非本项目的接口是存在跨域问题。
截图:
2 解决
方法:在A项目中创建一个.ashx文件(一般处理程序),作为通讯层,接收页面请求,
然后将请求转发给B项目,在获取B项目的返回值后,将返回值发给页面。
3 代码
A项目的通讯层代码
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Net;using System.IO;namespace LY.DRCM.WEBSITE.Handler{ /// <summary> /// DataHandler 的摘要说明 /// </summary> public class DataHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpResponse hResponse = context.Response;//HTTP响应消息 HttpRequest hRequest = context.Request;//HTTP请求消息 string param = (string)hRequest["param"];//获取请求参数 //创建http请求 string url = "http://localhost:38193/Handler.ashx?param=" + param; //发送请求 WebRequest request = HttpWebRequest.Create(url); //设置为POST请求 request.Method = "POST"; //获取响应对象 WebResponse response = request.GetResponse(); Stream responeBody = response.GetResponseStream(); using (StreamReader reader = new StreamReader(responeBody)) { result = reader.ReadToEnd(); } context.Response.ContentType = "text/plain"; context.Response.Clear(); context.Response.Write(result); context.Response.End(); } public bool IsReusable { get { return false; } } }}
代码分析:
HttpRequest类:使ASP.NET能够读取客户端在Web请求期间发送的HTTP值。
WebRequest类:发出对统一资源标识符(URL)的请求。这是一abstract类。
Stream类:流。
StreamReader类:实现一个TextReader,使其以一种特定的编码从字节流中读取字符。
A项目通讯层代码-使用POST:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Net;using System.IO;namespace LY.DRCM.WEBSITE.Handler{ /// <summary> /// DataHandler 的摘要说明 /// </summary> public class DataHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { HttpRequest hRequest = context.Request;//HTTP请求消息 string param = (string)hRequest["param"];//获取请求参数 //发送POST请求 string url = "http://localhost:38193/Handler.ashx"; WebRequest request = HttpWebRequest.Create(url); request.Method = "POST"; StreamWriter myStreamWriter = new StreamWriter(request.GetRequestStream()); myStreamWriter.Write(param); myStreamWriter.Close(); //获取响应对象 HttpWebResponse response = (HttpWebResponse)request.GetResponse(); StreamReader myStreamReader = new StreamReader(response.GetResponseStream()); string resultResponse = myStreamReader.ReadToEnd(); myStreamReader.Close(); //输出响应结果 context.Response.ContentType = "text/plain"; context.Response.Clear(); context.Response.Write(resultResponse); context.Response.End(); } public bool IsReusable { get { return false; } } }}
0 0
- C#之浏览器请求跨域
- 浏览器跨域请求之credentials
- 【转载】----浏览器跨域请求之credentials
- 解决ajax跨域请求浏览器兼容问题
- 浏览器拦截跨域请求处理方式
- web浏览器发送请求之Get,Post
- C#学习之简单浏览器
- IE7+浏览器下XMLHttpRequest跨域请求安全配置
- 浏览器禁止跨域请求json数据解决方法--jsonp
- 浏览器同源策略与跨域请求的实现方法
- 浏览器限制ajax跨域请求问题------SSM解决方案
- 关于谷歌浏览器html跨域请求
- 通过C#后台实现跨域请求
- C# ABP 允许跨域请求
- 解决浏览器在本地无法跨域请求,不支持Ajax请求,XMLHttpRequest不能加载的问题
- 跨域请求之JSONP
- 跨域请求之JSONP
- 跨域请求之CORS
- SSH框架
- Struts2值栈的相关操作
- 预加载(加载中) + 推荐移动端网页使用的图片懒加载(预加载)插件
- java 验证框架oval的使用方法
- 14xcode常用快捷键
- C#之浏览器请求跨域
- 用<a>提交表单
- 【bzoj3747】[POI2015]Kinoman 线段树
- 如何通过投掷一枚硬币产生各种概率
- python 入门
- 持续集成学好jenkins之Git和Maven配置
- 单文档 静态分隔窗口重新布局 出错 解决
- 开源 java CMS - FreeCMS商业版在模板中增加会员登录功能
- hdu1074Doing Homework【状态压缩】