The request URL is invalid in IIS 7

2019-03-25 07:44发布

问题:

here is my URL

http://abc.domain.com/controller/action/A74444C3A7FA858C7995CA9954CBCF1E26604634767C5575396D908E8415CF8CCC04C05F49FED0AA9D9743B69ABF232BDE9787A5222D081DA638896C0D2379A673E1747A2FFE1158F14AF098B2899D2ABEB4EA738D89369627E479796B6B2B9EA9B247CC59EF10E3A88B6A56A87F0818E2AD2A942FFA31F1C941BB7AF6FDC55FE6733353F28DFAC1827688604CBFBAB4856E6C75F810D13923F9D913F51F5B02980163E6CD63BC04610AD2C12E07360D7BC2C69F1B0CD03E

There are no invalid characters in the URL itself as everything is encrypted. Still I am getting

Bad Request - Invalid URL HTTP Error 400. The request URL is invalid.

I know the URL is awfully long and I was able to resolve that issue in my Cassini by adding this httpRuntime maxUrlLength="512"

in the web.config

However in IIS7 even after playing around with the requestfiltering maxurl and maxquerystring values I have not been able to resolve this.

This is an asp.net mvc 3 application.

回答1:

Your problem is you're not using a query string, but a path. A path has a maximum length of 255.



回答2:

This one is for posterity and for tracking my own problem. It's been said in another answer however, not as explicitly.

I've had the same problem on my end. The answer is of course to transfer the long URL segment to a Query string. Easier to handle.

The problem however is that HTTP.sys is not even letting the request through because a segment of the URL is exceeding 260 or so characters. However, we still had to support it.

You can change that setting in the registry. Once you reboot, the url will work.

Registry:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters]
"UrlSegmentMaxLength"=dword:00000400

This will effectively set the segment length to 1024.

Source



回答3:

The final path segment is likely to be too long.

See: http://social.msdn.microsoft.com/Forums/nl/netfxnetcom/thread/723e6bfd-cab7-417b-b487-67f1dcfa524f