DNN 重写 URL 并添加 Default.aspx?在查询字符串中

DNN rewriting URL and adding Default.aspx? in Query-String

我在 DNN 上有一个产品列表页面。

在这个模块上我有一个点击时调用的函数。我在 URL 中添加产品名称和 SKU 作为查询字符串。我注意到当 SKU 正常且没有正斜杠时,DNN 会将 ?Title= 重写为 /Title/ 并将 &SKU= 重写为 /SKU/。例如SKU/SR2018B

下面的 URL 可以工作: www.ourwebsite.com/Product-View/Title/staple-remover-black/sku/SR2018B

我的主要问题是当 SKU 有一个像正斜杠这样的特殊字符时,例如:SS023/10。这将导致 URL 中断。我正在为 SKU 使用编码器。请注意,?Title 没有更改为 /Title/,现在有一个 Default.aspx?出现在下面的 URL 中。

www.ourwebsite.com/Product-View?Title/staples-2313-1000pcs-100-pages/Default.aspx?sku=SS023%2f13

当一个人被重定向到详细页面时,这是我的隐藏代码。

if (tabIdToRedirectTo == null) m_alerts.ShowModuleMessage(ModuleMessage.ModuleMessageType.RedError, $"An error occurred when attempting to Redirect to the '{settingKey}' Page!", ref plcMessages, true); else Response.Redirect(Globals.NavigateURL(tabIdToRedirectTo.TabID, "", "?Title="+ hiddendescription.Value + "&sku=" + HttpUtility.UrlEncode(hiddensku.Value), EmbeddedModule.GenerateFullQueryStringForEmbedding(EmbeddedCompanyCode, EmbeddedShowCustPricing)));

我相信这就是您调用 Globals.NavigateUrl 函数的方式。该调用采用字符串参数,这些字符串是 key=value 格式的查询字符串。我通常喜欢轻松地看到我将要通过的内容,所以我会执行以下操作:

var qsParams = new List<string>{
    "Title=" + hiddendescription.Value, // "Title=staples-2313-1000pcs-100-pages"
    "sku=" + HttpUtility.UrlEncode(hiddensku.Value), // "sku=SS023%2f13"
    EmbeddedModule.GenerateFullQueryStringForEmbedding(EmbeddedCompanyCode, EmbeddedShowCustPricing)
};

return Globals.NavigateURL(tabIdToRedirectTo.TabID, "", qsParams.ToArray());

当然 - 我不知道你的EmbeddedModule.GenerateFullQueryStringForEmbedding是做什么的,但只要是returns一个key=value类型的输出,它应该被很好地传递和处理。