khi tôi thực hiện GET với WebRequest.Create ("http://abc/test.") Tôi nhận được 404 vì theo fiddler dấu chấm bị tước đi bởi .NET và máy chủ web cần dấu chấm. làm thế nào tôi có thể ngăn chặn điều đó hoặc làm việc xung quanh nó. bất kỳ cách giải quyết nào đều được đánh giá cao!HttpWebRequest với URL có dấu chấm ở cuối
Trả lời
Đây là vấn đề đã được biết đến trên diễn đàn của Microsoft một vài lần.
Lớp Uri
không chính xác nghĩ rằng tất cả URI hoạt động như tệp đĩa Windows nơi dấu chấm (không có đuôi tệp) không liên quan.
http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/5206beca-071f-485d-a2bd-657d635239c9/
Cách giải quyết trong tab workaround tại báo cáo lỗi chính thức:
.. có vẻ là hợp lệ. Về cơ bản, chạy mã này để đặt một lá cờ tĩnh trong .NET trước khi làm việc với System.Uri:
MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0)
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
Chứng minh:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
var surl = "http://x/y./z";
var url = new Uri(surl);
Console.WriteLine("Broken: " + url.ToString());
MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0)
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
url = new Uri(surl);
Console.WriteLine("Fixed: " + url.ToString());
Console.WriteLine("Press ENTER to exit ...");
Console.ReadLine();
}
}
}
Thủ thuật thông minh. Hoạt động rất tốt. – harriyott
Cảm ơn bạn rất nhiều! ;-) –
không hoạt động đối với tôi. Tôi đang tạo một ứng dụng biểu mẫu cửa sổ. –
bạn thay đổi chấm vào String để Hex
string.format("{0:x2}",yoururl);
tôi nghĩ rằng nó hữu ích cho u, bởi vì tôi sử dụng nó trong twitter API Oauth định dạng
Viết lại một số của tôi t đến một chức năng không yêu cầu bạn thêm bất kỳ không gian tên nào
private Uri MyUri(string url)
{
Uri uri = new Uri(url);
System.Reflection.MethodInfo getSyntax = typeof(UriParser).GetMethod("GetSyntax", System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo flagsField = typeof(UriParser).GetField("m_Flags", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
if (getSyntax != null && flagsField != null)
{
foreach (string scheme in new[] { "http", "https" })
{
UriParser parser = (UriParser)getSyntax.Invoke(null, new object[] { scheme });
if (parser != null)
{
int flagsValue = (int)flagsField.GetValue(parser);
// Clear the CanonicalizeAsFilePath attribute
if ((flagsValue & 0x1000000) != 0)
flagsField.SetValue(parser, flagsValue & ~0x1000000);
}
}
}
uri = new Uri(url);
return uri;
}
- 1. Chúng ta có cần dấu chấm phẩy ở cuối?
- 2. Dấu chấm hỏi ở cuối css bao gồm url là gì?
- 3. Dấu chấm phẩy Perl ở cuối câu lệnh
- 4. loại bỏ dấu chấm ở cuối văn bản
- 5. Thêm dấu gạch chéo ở cuối mỗi url?
- 6. URL có thể chứa dấu chấm phẩy không?
- 7. Tại sao bạn cần dấu gạch chéo ở cuối URL?
- 8. Dấu chấm ở cuối phao có cho thấy thiếu chính xác không?
- 9. Kết hợp một từ, với dấu chấm câu hoặc số nhiều ở cuối (Regex)
- 10. Quy ước đặt tên: Tại sao mảng # xóa không có dấu chấm than ở cuối?
- 11. Dấu chấm hỏi ở cuối tên tập tin có nghĩa là gì?
- 12. RFC 1738: URL: Máy chủ có chứa dấu chấm không?
- 13. Đường dẫn dài với dấu chấm lửng ở giữa
- 14. ba dấu chấm trong "doInBackground (URL ... url)" có nghĩa là gì?
- 15. Tại sao Java không hiển thị lỗi cho dấu chấm phẩy kép ở cuối câu lệnh?
- 16. Javascript: Xóa ký tự cuối cùng nếu dấu hai chấm
- 17. Dấu chấm phẩy thừa ở cuối dòng trong tập lệnh shell?
- 18. Dấu chấm phẩy ở cuối các câu lệnh if và các hàm trong C
- 19. Nối biến ở cuối URL - PHP
- 20. attr_reader với dấu chấm hỏi trong tên
- 21. R: xóa ba dấu chấm cuối cùng khỏi chuỗi
- 22. Lạ # _ = _ xuất hiện ở cuối url sau khi response.redirect ASP.NET
- 23. Các dấu + ở cuối mỗi dòng dấu vết là gì?
- 24. Regex để phù hợp với ký tự chữ, dấu gạch dưới, dấu chấm và dấu gạch ngang, cho phép dấu chấm và dấu gạch ngang chỉ ở giữa
- 25. .htaccess ghi đè URL bằng dấu chấm hỏi "?"
- 26. Dấu chấm phẩy được dành riêng cho URL là gì?
- 27. ASP.NET MVC Url Route hỗ trợ (dấu chấm)
- 28. Tại sao cuộc gọi lambda Ruby 1.9 có thể không có dấu chấm ở trước dấu ngoặc đơn?
- 29. Dấu hỏi ở giữa biến số url?
- 30. Làm thế nào để có được ASP.NET MVC để phù hợp với dấu chấm (".") Nhân vật ở cuối trong một tuyến đường?
http://msdn.microsoft.com/en-us/library/hh367887(v=VS.110).aspx xác nhận điều này đã được sửa. NET4.5. – EricLaw