Ich habe kürzlich an einem Projekt gearbeitet, das domänenübergreifende Anfragen für den Zugriff auf Daten erforderte. In diesem Artikel erhalten Sie eine ausführliche Erläuterung des domänenübergreifenden Ajax-Zugriffscodes in C#. Freunde, die ihn benötigen, können auf
verweisen. Aufgrund von Projektanforderungen wurden kürzlich domänenübergreifende Anfragen gestellt sind für den Zugriff auf die Daten erforderlich. Was bedeutet domänenübergreifender Zugriff?
[Domainübergreifend]: Bezieht sich auf die Tatsache, dass der Browser keine Skripte von anderen Websites ausführen kann. Dies wird durch die Same Origin Policy des Browsers verursacht, eine Sicherheitsbeschränkung, die der Browser für JavaScript auferlegt. Die sogenannte gleiche Domäne bedeutet, dass der Domänenname, das Protokoll und der Port gleich sind, wenn Sie es nicht verstehen. Beispielsweise gibt es auf meinem Computer zwei Server, 192.168.0.11 und 192.168.0.12 . Wenn eine Seite auf dem ersten Server auf Daten auf dem zweiten Server zugreifen muss, spricht man von einer domänenübergreifenden Seite. Oder http://www.baidu.com, um auf www.xxx.com zuzugreifen, ist auch ein anderer Domänenname und domänenübergreifend. Der vollständige Anfragefall ist unten angegeben:
Codeteil der Front-End-Seitenanforderung:
<script type="text/javascript"> function ajaxsubmit(name,phone) { $.ajax({ type: "get", url: "http://10.10.10.132:35709/AppInterface/ResourceInsert.ashx", data: { "share_name": encodeURI(name), "telphone": encodeURI(phone), "fromtype": 4 }, dataType : "jsonp", jsonp: "callback", jsonpCallback: "successcallback", success: function (json) { alert(json.msg); }, error:function(e){ alert("提交失败!请稍后再试"); } }); } </script>
Codeteil des allgemeinen Handlers:
public class ResourceInsert : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "application/json"; context.Response.ContentEncoding = System.Text.Encoding.UTF8; cms.Model.Resource model = new Model.Resource(); cms.BLL.Resource bll = new BLL.Resource(); //你所需要进行的操作 model.share_name = HttpUtility.UrlDecode(context.Request["share_name"]); model.ask_telphone = HttpUtility.UrlDecode(context.Request["telphone"]); model.back_row_one = context.Request["fromtype"]; ConvertHelper ch = new ConvertHelper(); model.share_name = ch.RemoveSpecialChar(model.share_name); //successcallback为跨域请求回调函数,切记必不可少。获取方式也可以为context.Request["callback"], //对应前端页面发起请求的jsonp和jsonpCallback格式为:jsonp_value=jsonpCallback_value if (bll.Exists(model.share_name, model.ask_telphone)) { Message temp = new Message(1, "我们已收到您的请求额!请勿重复提交!", null); context.Response.Write("successcallback" + "(" + JsonConvert.SerializeObject(temp) + ")"); context.Response.End(); return; } else { if (bll.Add(model) > 0) { Message temp = new Message(1, "提交成功,我们工作人员会尽快回复你!感谢关注!", null); context.Response.Write("successcallback" + "(" + JsonConvert.SerializeObject(temp) + ")"); context.Response.End(); return; } else { Message temp = new Message(0, "请确认信息填写无误!", null); context.Response.Write("successcallback" + "(" + JsonConvert.SerializeObject(temp) + ")"); context.Response.End(); return; } } } public bool IsReusable { get { return false; } } }
Glauben Sie, dass es vorbei ist? Hier? Natürlich nicht/schielend. Konfigurationsdatei ist natürlich unverzichtbar. Fügen Sie die folgende Konfiguration unter dem system.webServer-Knoten in der web.config-Datei hinzu:
<system.webServer> <httpProtocol> <customHeaders> <add name="Access-Control-Allow-Methods" value="OPTIONS,POST,GET"/> <add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/> <add name="Access-Control-Allow-Origin" value="*" /> </customHeaders> </httpProtocol> </system.webServer>
Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in Probleme mit dem domänenübergreifenden Ajax-Zugriff in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!