让使用WebForm的.aspx文件写的WebApi能够跨域访问

解决办法

在web.config文件中加入下面的节点来配置。

  <system.webServer>
    <directoryBrowse enabled="false" />

    <httpProtocol>
      <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="*" />
      </customHeaders>
    </httpProtocol>
  </system.webServer>

事情起因

我的同事创造了一种用WebForm写WebApi的方法。

怎么写的呢?

建一个文件叫做api.aspx。

然后再Page_Load事件中:

能拿到请求的地址栏参数;

         string method = this.Request.QueryString["method"];
         string openid = this.Request.QueryString["openid"];

能拿到请求的body;

         string ps = new StreamReader(this.Request.InputStream).ReadToEnd();

还能响应;

            else if (method.ToLower() == "app_yushoudan.get")
            {
                var res = new YuShouDan().get(psObj).ToJson();
                this.Response.Write(res);
                Log(method, ps, res);
                this.Response.End();
                return;
            }

这些接口给写微信前端的同事调用是没有问题的。

但是这两天我想用它来练习下浏览器前端,结果就发现了跨域的问题。

一开始没有找到解决办法,于是我建了一个.NET Core2.1 WebApi项目来提供练习用的接口,它配置允许跨域是很简单的。

现在找到了配置的方法,特此记录。

写法的启发

上面接口的写法对我是有启发性的。

它提醒了我,web服务器的本质就是【Request】和【Response】。

然后,.NET中专门监听http请求的类是【HttpLitenser】。利用它我实现了可以监听http请求并响应的程序,也就是一个最简单的WebApi的功能。

我需要牢记,Web编程最重要的基础就是http协议。

然后除了http协议,还有很多其他的协议和约定都是Web开发的基础。

原文地址:https://www.cnblogs.com/fabao/p/12726565.html