在我的WebAPI项目中,重定向有一些问题。 这是因为Uri.ToString )方法的行为是“防御性的”。 换句话说,调用所提到的方法时,将对查询字符串的安全部分进行解码。
考虑以下不合格的单元测试。
使用系统;
using Microsoft.visual studio.test tools.unit testing;
namespace UriTest
{
[TestClass]
公共类单元测试1
{
[TestMethod]
公共语音测试方法1 (
{
//Arrange
const string expectedUrlRaw=
' http://localhost/abc? proxy=http://target.nl? param1=value1&; param2=value2';
conststringexpectedurlinhttpsraw=
' https://localhost/abc? proxy=http://target.nl? param1=value1&; param2=value2';
uriexpecteduri=new uri (expectedurlraw;
uriexpecteduriinhttps=new uri (expectedurlinhttpsraw;
//Act
stringreturnsuriinhttpsraw=expected uri.tohttps ().ToString );
//Assert
assert.are equal (expectedurlinhttpsraw,returnsUriInHttpsRaw;
}
}
publicstaticclassstringextensions
{
publicstaticuritohttps (thisuriuri )。
{
uribuilderuribuilder=new uri builder (uri );
uri builder.scheme=uri.urischemehttps;
uriBuilder.Port=443;
return uriBuilder.Uri;
}
}
}
由于当前无法控制Uri属性,因此无法构建自己的链接来更改此行为。
在我的控制器上,响应get消息以重定向呼叫:
httpresponsemessageresponse=request.create response (http status code.found );
response.headers.location=//myuriobject
这在一定程度上可以正常工作。 如果重定向Uri包含包含编码链接的查询,则会返回错误的结果。 (这可能是因为Headers.Location通过对此属性调用ToString来读取的。
有没有人在考虑如何解决这个问题?
谢谢
浏览方案
Uri.ToString ()确保对URL编码的序列进行解码。 例如,=空格)。
. net框架的不同版本之间的行为也会发生变化。
也就是说,请使用Uri.ToString (而不是,Uri.AbsoluteUri或Uri.OriginalString )。
有关详细信息,请参阅以下文章
3359 DHV ik.blogspot.com/2019/12/uri tostring-automatically-decodes-URL.html
java.net.URI.create异常- java
Java.net.uri.create (http://ad server.adtech.de/adlink|3.0 ) )。 投Java.net.urisyntaxexception : illegalcharacterinpathatindex 32:http://ad server.adtech.de/adlink|3.0,但…tos tos tttos
我有以下两个班。 如下。 为了简单起见,只给出了toString重写的方法。 public class circle { @ overridepublicstringtostring () ) { return 'Circle; } publicclasscylinderextendscircle { @ override pub…将'.tostring (“- c”)用于数字变量
将数值转换为. ToString ()时省略string有什么缺点吗? int i=1234; 字符串s; //Instead of s='i is ' i.ToString (; //Writing s='i is ' i; 参考方案在这种情况下没有任何不同。 ' Count: … ASP.NET Web API 2的授权属性发生了什么变化? - c#
已将一组项目和单元测试从ASP.NET Web API升级到ASP.NET Web API 2。 使用自定义DelegatingHandler自定义身份验证机制。 将Thread.CurrentPrincipal和HttpContext.Current.User设置为相应的system.security.claims.claims principal。 如何根据uri确定文件的文件扩展名- java
如果给我URI,想找返回的文件的文件扩展名,用Java该做什么呢? 例如,位于http://www.daml.org/2001/08/baseball/baseball-ont的文件为http://www.daml.org/2001/08/baseball/baseball-ont