有问题的页面是我的软件的设置页面。我希望用户将许可证密钥粘贴到 textarea 中。然后他们可以选择验证它(在控制器上完成验证)并且他们可以“应用”它(保存在服务器上的 reg 键中)
但是,我似乎已经达到了可以发送到控制器的最大长度。密钥作为字符串传递,但失败并出现错误是它的长度超过 2142 个字符。(我的钥匙大约 2500 ish)
所以我认为我会很聪明,并使用 slice 将非常长的许可证密钥分成 2 或 3 部分,但后来我似乎遇到了一个略短的“整体”长度限制。
所以这里是分割成 2 个字符串的代码,如果我将总长度保持在 1800,它工作正常但是,如果我尝试添加第三个或将总长度增加到超过 2000(大约),我会在控制器处收到错误和断点永远达不到。
控制器
Function UpdateLicense(Params As ConfigParams, NewLicenseKeyA As String, NewLicenseKeyB As
String) As EmptyResult
Dim LicKey As String = NewLicenseKeyA + NewLicenseKeyB
'just testing
Return Nothing
End Function
这是视图
$(document).ready(function () {
$("#CheckLicense").bind("click", function () {
$.ajax({
url: '@Url.Action("UpdateLicense", "Home")',
data: { NewLicenseKeyA: ($("#NewLicKey").val()).slice(0, 900), NewLicenseKeyB: $("#NewLicKey").val()).slice(900, 1800) },
success: function (data) {
alert("Success!");
},
error: function (xhr, ajaxOptions, thrownError) {
//some errror, some show err msg to user and log the error
alert(xhr.responseText);
}
});
我猜 URL 有一个总的最大长度,它阻止了我,通过拆分字符串,我向 URL 添加了更多内容,从而缩短了我为发送许可证代码留下的空间。
任何想法..记住我是 MVC 和 Web 的新手。如果我的假设是正确的,那么我在想也许我可以对控制器进行多次调用,每次调用 1000 个字符,然后调用最后一个将它们连接在一起的调用。这可能吗?
好的更新:我现在有一个解决方法。这是更新的控制器
Function UpdateLicense(Params As ConfigParams, NewLicenseKeyPart As String, KeyName As String) As EmptyResult
Dim NewLicenseKey As String
Select Case KeyName
Case "A"
RegistryHelpers.SetRegistryValue("Software\FormeWare\SCAR\", "LicKeyA", NewLicenseKeyPart)
Return Nothing
Case "B"
Dim LicKeyPartA = RegistryHelpers.GetRegistryValue("Software\FormeWare\SCAR\", "LicKeyA", False)
NewLicenseKey = LicKeyPartA + NewLicenseKeyPart
'Proceed to Process
Case Else
'hmmmmm
End Select
Return Nothing
End Function
所以这可行,但似乎是实现我想要的一种非常粗鲁的方式..这样做的“正确”方式是什么?