解決辦法
在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開發的基礎。