2014-10-04 16 views
33

Tôi muốn lấy tên miền hiện tại trong asp.net C#.Cách lấy tên miền hiện tại trong ASP.NET

Tôi đang sử dụng mã này.

string DomainName = HttpContext.Current.Request.Url.Host; 

URL của tôi là localhost:5858 nhưng nó chỉ trả localhost.

Hiện tại, tôi đang sử dụng dự án của mình trong máy chủ cục bộ. Tôi muốn lấy localhost: 5858.

Ví dụ khác, khi tôi đang sử dụng miền này

www.somedomainname.com 

Tôi muốn nhận somedomainname.com

Xin vui lòng cho tôi một ý tưởng làm thế nào để có được tên miền hiện hành.

+1

Hostname và tên miền là 2 thứ khác nhau. Bạn có muốn một miền được ánh xạ tới địa chỉ IP cụ thể của bạn hoặc tên máy chủ của máy mà nó chạy không? –

+0

có thể trùng lặp của [Phương pháp tốt nhất trong ASP.NET để lấy tên miền hiện tại là gì?] (Http://stackoverflow.com/questions/61817/whats-the-best-method-in-asp-net-to-obtain -miền hiện tại) – Gitz

Trả lời

36

Sử dụng Request.Url.Host là thích hợp - đó là cách bạn lấy giá trị của HTTP Host: tiêu đề, trong đó quy định cụ thể mà hostname (tên miền) UA (trình duyệt) muốn, như phần đường dẫn tài nguyên của yêu cầu HTTP không bao gồm tên máy chủ.

Lưu ý rằng localhost:5858 không phải là tên miền, nó là một trình xác định điểm cuối, còn được gọi là "quyền hạn", bao gồm tên máy chủ và số cổng TCP. Điều này được truy xuất bằng cách truy cập Request.Uri.Authority.

Bên cạnh đó, nó không phải là hợp lệ để có được somedomain.com từ www.somedomain.com vì một máy chủ web có thể được cấu hình để phục vụ cho một trang web khác nhau cho www.somedomain.com so với somedomain.com, tuy nhiên nếu bạn có chắc đây là hợp lệ trong trường hợp của bạn thì bạn sẽ cần phải tự phân tích tên máy chủ, mặc dù sử dụng String.Split('.') hoạt động trong một nhúm.

Lưu ý rằng cấu hình máy chủ web (IIS) khác với cấu hình của ASP.NET và ASP đó.NET thực sự hoàn toàn không biết gì về cấu hình liên kết HTTP của các trang web và các ứng dụng web mà nó chạy dưới. Thực tế là cả IIS và ASP.NET đều có cùng các tệp cấu hình (web.config) là một cá trích đỏ.

34

Hãy thử nhận được “phần bên trái” của url, như thế này:

string DomainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); 

này sẽ cung cấp cho bạn cả “localhost: 5858” và “www.somedomainname.com”. Nếu bạn muốn thả WWW, bạn nên cấu hình IIS (mà tôi không biết làm thế nào để làm).

Xem thêm:

Request.Url.GetLeftPart (UriPartial.Authority);

Yêu cầu.RequestUri.GetLeftPart (UriPartial.Authority);

Cả hai sẽ trở lại, ví dụ: http://localhost:60333/

+2

Đây sẽ là câu trả lời hay nhất theo ý kiến ​​của tôi. – Andrew

16

Bạn có thể thử đoạn mã sau:

Request.Url.Host + 
    (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port) 
1

HttpContext.Current.Request.Url.Host đang trở lại các giá trị chính xác. Nếu bạn chạy nó trên www.somedomainname.com nó sẽ cung cấp cho bạn www.somedomainname.com. Nếu bạn muốn nhận được 5858 cũng bạn cần phải sử dụng

HttpContext.Current.Request.Url.Port 
4

www.somedomain.com tên miền/máy chủ lưu trữ. Tên miền phụ là một phần quan trọng. www. thường được sử dụng thay thế cho nhau khi không có, nhưng điều đó phải được thiết lập như một quy tắc (ngay cả khi quy tắc được đặt theo mặc định) vì chúng không tương đương. Hãy nghĩ đến một tên miền phụ khác, như mx.. Điều đó có thể có mục tiêu khác với mục tiêu là www..

Cho rằng, tôi khuyên không nên làm điều này. Điều đó nói rằng, vì bạn đang yêu cầu tôi tưởng tượng bạn có một lý do chính đáng.

Cá nhân, tôi khuyên bạn nên sử dụng vỏ đặc biệt www. cho việc này.

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);; 

if (host.StartsWith("www.")) 
    return host.Substring(4); 
else 
    return host; 

Ngược lại, nếu bạn thực sự chắc chắn 100% rằng bạn muốn chặt bất kỳ subdomain, bạn sẽ cần một cái gì đó một chút phức tạp hơn.

string host = ...; 

int lastDot = host.LastIndexOf('.'); 

int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.'); 

if (secondToLastDot > -1) 
    return host.Substring(secondToLastDot + 1); 
else 
    return host; 

Nhận cổng giống như những người khác đã nói.

2

đối tượng Request.ServerVariables phù hợp với tôi. Tôi không biết lý do nào để không sử dụng nó.

ServerVariables["SERVER_NAME"]ServerVariables["HTTP_URL"] sẽ nhận được những gì bạn đang tìm kiếm

29

Đây là một ảnh chụp màn hình của Request.RequestUri và tất cả các thuộc tính của nó để tham khảo của mọi người.

enter image description here

0

Bạn có thể thử các mã sau đây để có được tên miền đầy đủ:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host 
+4

Mặc dù đoạn mã này có thể giải quyết được câu hỏi, [bao gồm cả giải thích] (http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho người đọc trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn. –

Các vấn đề liên quan