2013-05-02 31 views
13

Bạn sẽ đọc các biến máy chủ sau đây trong bộ điều khiển ASP.NET Web API như thế nào?ASP.NET Web API: Làm cách nào để bạn đọc biến máy chủ trong bộ điều khiển API Web?

HTTP_HOST 
SERVER_NAME 
REMOTE_HOST/REMOTE_ADDR 

Tôi thấy một System.Net.Http.HttpRequestMessage Yêu cầu được xác định, nhưng tôi không thấy bộ sưu tập chứa các biến này.

Tôi đang chạy một trang web trên một IP duy nhất có nhiều tiêu đề lưu trữ và tôi cần phải xác định trang web nào họ đã sử dụng để truy cập vào đó.

EDIT:

Nó kết thúc lên được một cái gì đó như thế này:

((System.Web.HttpContextWrapper) Request.Properties["MS_HttpContext"]) 
    .Request.ServerVariables["HTTP_HOST"] 
+2

này có thể là những gì bạn đang tìm kiếm: http://stackoverflow.com/questions/9565889/get-the-ip- address-of-the-remote-host –

+1

@MajorByte Điều đó rất giống nhau. –

Trả lời

11

Thông tin bạn đang tìm kiếm phụ thuộc vào máy chủ mà bạn đang sử dụng và Web API được thiết kế để lưu trữ độc lập. Vì vậy .... thông tin bạn đang tìm kiếm sẽ được chôn trong bộ sưu tập httpRequestMessage.Properties và nó sẽ khác nhau tùy thuộc vào máy chủ lưu trữ của bạn.

Nếu bạn chuyển sang sử dụng bộ điều hợp Owin thì bạn sẽ nhận được một đối tượng môi trường Owin chuẩn hóa.

+0

Đề xuất tốt. Tôi có thể thấy 'Request.Properties [" MS_HttpContext "]. Request.Url' cùng với UrlReferrer. Câu hỏi lớn là liệu nó đại diện cho tiêu đề máy chủ của trang web mà họ đã truy cập hay không. –

+0

Tôi tự hỏi nếu http://msdn.microsoft.com/en-us/library/system.net.http.headers.httprequestheaders.aspx là một cách nhất quán để đọc thông tin này bất kể môi trường lưu trữ? –

+4

((System.Web.HttpContextWrapper) Request.Properties ["MS_HttpContext"]) Request.ServerVariables ["HTTP_HOST"] –

-11

Chỉ cần như thế này

using System; 
using System.Web.Mvc; 

public class MyController : Controller 
{ 
    public ActionResult Index() 
    { 
     var httpHost = Request.ServerVariables["HTTP_HOST"]; 
     // etc 
    } 
} 
+1

'System.Net.Http.HttpRequestMessage' không chứa định nghĩa cho 'ServerVariables' và không có phương thức mở rộng 'ServerVariables' chấp nhận đối số đầu tiên của loại 'System.Net.Http.HttpRequestMessage' có thể được tìm thấy (bạn đang thiếu một sử dụng chỉ thị hoặc tham chiếu lắp ráp?) –

+0

Bạn có thể đăng mã nguồn của mình không. Ngoài ra, hãy kiểm tra xem bạn có 'using System hay không; sử dụng System.Web.Mvc; 'ở đầu tệp –

+0

Hệ thống; System.Collections.Generic; System.Linq; System.Net; System.Net.Http; System.Web.Http; Bởi vì nó là một API MVC, nó dường như không sử dụng Đối tượng Yêu cầu bình thường –

2

tôi đã có thể cho tất cả các thông tin mà từ RequestUri trong Yêu cầu

Request.RequestUri.Scheme + Uri.SchemeDelimiter + 
    Request.RequestUri.Host + (Request.RequestUri.IsDefaultPort ? string.Empty : (string.Concat(":", Request.RequestUri.Port))) 
Các vấn đề liên quan