問題のページは、私のソフトウェアのセットアップ ページです。ユーザーにライセンス キーを textarea に貼り付けてもらいたい。次に、それを検証するオプションがあり (検証はコントローラーで行われます)、それを「適用」できます (サーバーのレジストリキーに保存されます)。
ただし、コントローラーに送信できる最大長に達したようです。キーは文字列として渡されますが、エラー is its long than 2142 characters で失敗します。(私のキーは約2500っぽいです)
だから私は賢く、slice を使って非常に長いライセンス キーを 2 つまたは 3 つの部分に分割しようと考えましたが、「全体的な」長さの制限が少し短くなっているようです。
これが 2 つの文字列に分割されたコードで、全体の長さを 1800 のままにしておくと問題なく動作します。ただし、3 番目を追加したり、全体の長さを 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 文字でコントローラーを複数回呼び出してから、それらをすべて結合する最後の呼び出しを呼び出すことができるのではないかと考えていました。それは可能ですか?
OK 更新: 今のところは回避策があります。アップデートされたコントローラーはこちら
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
これは機能しますが、私が望むものを達成するためのかなり失礼な方法のようです..これを行う「正しい」方法は何ですか?