JQgrid 4.3.1在HTTPS站点发起HTTP请求致混合内容错误,如何强制用HTTPS?
解决JQgrid 4.3.1在HTTPS环境下发起HTTP请求的混合内容问题
针对你遇到的JQgrid编辑请求强制使用HTTP导致的混合内容错误,提供以下几种可行方案:
方案一:后端生成HTTPS绝对URL(推荐)
直接在editUrl配置中生成带HTTPS协议的绝对路径,替换原来的相对路径生成方式。修改HTML中data属性里的editUrl值:
editUrl:"@Url.Action("BusinessChannelEdit", null, "https", Request.Host.Value)"
这个重载的Url.Action方法会直接生成以HTTPS开头的完整请求地址,从根源确保JQgrid发起的请求使用HTTPS协议。
方案二:前端动态修改JQgrid的editUrl配置
如果无法修改后端代码,可以在页面加载完成后,手动修改JQgrid的editUrl参数,强制替换为HTTPS协议:
$(function() { // 获取当前站点的HTTPS基础地址 var baseHttpsUrl = window.location.protocol + "//" + window.location.host; // 拼接完整的HTTPS请求地址 var httpsEditUrl = baseHttpsUrl + '@Url.Action("BusinessChannelEdit")'; // 修改JQgrid的editUrl配置 $("#businessGrid").jqGrid('setGridParam', { editUrl: httpsEditUrl }); });
这段代码会自动获取当前站点的HTTPS域名,拼接出正确的编辑接口地址,覆盖JQgrid原有的editUrl配置。
方案三:全局强制HTTPS(补充方案)
如果希望全站所有请求都使用HTTPS,可以在后端配置强制跳转:
- 在ASP.NET控制器的
BusinessChannelEdit方法上添加[RequireHttps]特性,强制该接口仅接受HTTPS请求; - 在
web.config中配置URL重写规则,将所有HTTP请求重定向到HTTPS:
<system.webServer> <rewrite> <rules> <rule name="HTTP to HTTPS redirect" stopProcessing="true"> <match url="(.*)" /> <conditions> <add input="{HTTPS}" pattern="off" ignoreCase="true" /> </conditions> <action type="Redirect" url="https://{HTTP_HOST}/{R:1}" redirectType="Permanent" /> </rule> </rules> </rewrite> </system.webServer>
内容的提问来源于stack exchange,提问作者user3703570
相关产品推荐
相关产品推荐

