2014-02-11 32 views
0

希望這是一個快速修復。查詢字符串中的編碼HTML標記仍然導致500錯誤

我從AngularJS應用程序發送查詢字符串到以C#編碼的Web API。該字符串包含一個「消息」值,可能包含或不包含網址編碼的HTML標記。

這裏有一個基本的例子:

msg = "<a>" 
querystring = "/SERVERPATH/?id=1&msg=%3Ca%3E" 

上面發送到我的API的結果字符串500的錯誤和「味精」價值從來沒有真正到達服務器。另一方面,在「a」之前和之後添加空格會導致所有內容都很好地工作。

msg = "<a>" 
querystring = "/SERVERPATH/?id=1&msg=%3C%20a%20%3E" 

有一種特殊類型的發生,我不知道驗證的,而且是有來配置這些規則,我自己的方式?

這可能與web.config有關,但我可能完全錯了。任何投入將不勝感激。

+0

從我記得,ASP.NET不允許你默認提交HTML到服務器。我很確定在web.config中有一個設置 - http://www.asp.net/whitepapers/request-validation – Ian

+0

您可以使用HTTP POST方法而不是查詢字符串在郵件正文中發送郵件。 – Coder

+0

我實際上正在使用POST與AngularJS的$ http方法結合使用。該消息作爲參數添加,然後在提交後被格式化並編碼爲查詢字符串。 – ThisLanham

回答

0

錯誤代碼500用於內部服務器錯誤。這意味着你的代碼確實到達了你的網絡服務。通過你的例子(在'a'之前和之後放置一個空間使一切正常)我非常確定請求驗證在你的web服務上失敗。要了解請求驗證,請訪問this link

警告一句:儘量不要禁用Web服務上的請求驗證。這樣做會造成巨大的安全威脅。

您可能會考慮解決此問題,而不是使用URLEncode,您可以使用HTMLEncode對查詢字符串值(僅限值)進行編碼。