2014-05-01 17 views
27

Tôi vừa hoàn tất việc thêm các thành phần C# Web API (Mô hình API Web & Bộ điều khiển) vào bản sao localhost của một dự án hiện có.C# Web - localhost: cổng hoạt động, 127.0.0.1:port không hoạt động

Phương thức GET của API Web này nên được gọi từ ứng dụng Android. Trong this link nó giải thích tôi nên sử dụng 10.0.2.2 trên giả lập Android để có được 127.0.0.1 của máy tính.

Khi tôi đã làm điều này, nó không hoạt động cho HttpRequest của tôi trong ứng dụng Android. Vì vậy, tôi đã đi đến trình duyệt Android và gõ nó trực tiếp, và nó cũng không hoạt động.

Sau đó, tôi cố gắng sử dụng 127.0.0.1 thay vì localhost trong trình duyệt của máy tính của tôi, và đối với một số lý do nào đó nó cũng không hoạt động .. Có khác nhau giữa localhost127.0.0.1? Tôi luôn nghĩ rằng họ là một và giống nhau.

Đây là 400 error tôi nhận được khi sử dụng 127.0.0.1: 127.0.0.1 error 400 bad request

Và với localhost tất cả mọi thứ hoạt động tốt.

Vì vậy, câu hỏi của tôi: Làm cách nào để sử dụng localhost trên Trình mô phỏng (hoặc, làm cách nào để khắc phục lỗi tôi nhận được khi sử dụng 127.0.0.1 thay vì localhost)? Ngoài ra, tôi muốn biết sự khác biệt giữa localhost127.0.0.1, vì tôi luôn nghĩ rằng chúng giống nhau.

Cảm ơn bạn đã trả lời trước.


Sửa 1:

Trong this stackoverflow question họ đề cập đến file host trong System32 của Windows. Tôi đã mở tệp này bằng Notepad ++ (dưới dạng Quản trị viên) và bỏ ghi chú các dòng với 127.0.0.1 localhost::1 localhost. Nhưng không may điều này đã không khắc phục được sự cố và tôi vẫn không thể sử dụng 127.0.0.1 trên máy tính của mình để thay thế cho localhost. Có lẽ vì vấn đề của tôi là đảo ngược (Tôi có thể truy cập localhost, nhưng không 127.0.0.1, thay vì cách khác xung quanh.)


Chỉnh sửa 2:

Trong this stackoverflow answer nó giải thích rằng sự khác biệt giữa localhost127.0.0.1 là:

  • 127.0.0.1 sẽ dễ dàng được nhận ra là IP trong một số ngôn ngữ lập trình.
  • localhost có thể được thay đổi thành IP khác trong tệp lưu trữ của máy tính (tệp được đề cập trong số Chỉnh sửa 1) của tôi.
  • Có một số khác biệt giữa IPv4 và IPv6.

Tất cả và tất cả tôi đều hiểu sự khác biệt hiện tại, tôi chỉ không hiểu tại sao máy chủ cục bộ của tôi hoạt động, nhưng 127.0.0.1 không phải là ..


Sửa 3:

Liệu nó có làm điều gì đó với port (tôi sử dụng 54408 như port)? Tôi đã mở cmd và đã làm các xét nghiệm sau đây:

  • ping localhost: Tôi nhận được một phản ứng với 4 lần Reply from ::1: time<1ms.
  • ping 127.0.0.1: Tôi nhận được một phản ứng với 4 lần Reply from 127.0.0.1: bytes=32 time<1ms TIL=128
  • ping localhost:54408: Tôi nhận được một lỗi Ping request could not find localhost:54408. Please check the name and try again.
  • ping 127.0.0.1:54408: Tôi nhận được một lỗi Ping request could not find 127.0.0.1:54408. Please check the name and try again.

Và cũng giống như tôi đã đã nói trước: 127.0.0.1:54408 trong trình duyệt cho biết lỗi được thấy trong hình ở trên. Và localhost:54408 chỉ hoạt động tốt ..

Vẫn không có ai có ý tưởng về cách sửa lỗi này?


Sửa 4:

Bản sao hosts-file của tôi, nằm ở C:\Windows\System32\drivers\etc.

# Copyright (c) 1993-2009 Microsoft Corp. 
# 
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows. 
# 
# This file contains the mappings of IP addresses to host names. Each 
# entry should be kept on an individual line. The IP address should 
# be placed in the first column followed by the corresponding host name. 
# The IP address and the host name should be separated by at least one 
# space. 
# 
# Additionally, comments (such as these) may be inserted on individual 
# lines or following the machine name denoted by a '#' symbol. 
# 
# For example: 
# 
#  102.54.94.97  rhino.acme.com   # source server 
#  38.25.63.10  x.acme.com    # x client host 

# localhost name resolution is handled within DNS itself. 
127.0.0.1 localhost 
::1   localhost 

Hai dòng cuối cùng từng là:

#  127.0.0.1  localhost 
#  ::1   localhost 

Sửa 5/Semi-Giải pháp:

Sau gợi ý Jake C của tôi đã đi tìm cho Visual cấu hình cổng Studio và tìm thấy the following site. Tại mục "Để chỉ định cổng cho dự án ứng dụng Web sử dụng Visual Studio Development Server", tôi làm theo hướng dẫn và thay đổi tùy chọn Web trong Thuộc tính dự án thành Use Visual Studio Development Server bằng số 54408 port của tôi.

Đây là bước tuyệt vời để đi đúng hướng, vì 127.0.0.1:54408 trang chủ hiện hoạt động. Tuy nhiên, khi tôi cố gắng đăng nhập bằng Google OAuth trên C# trang web, tôi đã nhận được lỗi sau: enter image description here

Một trong tôi đồng nghiệp cũ người đã làm việc trên các dự án web C# nói với tôi một lần về this stackoverflow post. Trong câu trả lời của bài đăng này, tôi phải thêm redirect-urls (trong trường hợp của tôi là 127.0.0.1) vào Google APIs Console. Hiện tại, tôi không có quyền truy cập vào số Console này cho dự án localhost của mình vì nó được lấy thông qua SVN. Tôi sẽ yêu cầu một trong những giám sát viên của tôi cho phép xem Google APIs Console của dự án web C# này và có thể chỉnh sửa redirect-urls để bao gồm 127.0.0.1.

Khi tôi đã hoàn thành công việc, tôi sẽ chấp nhận câu trả lời của Jake C, vì lời giải thích của ông về số Http port configurations thực sự đã giúp tôi tìm câu trả lời.


Sửa 6:

Ok, tôi đã sử dụng riêng Google API Console của tôi và tạo ra một dự án mới với một ID khách hàng mới. Tôi đã thêm cả hai http://localhost:54408/Account/ExternalLoginCallbackhttp:127.0.0.1:54408/Account/ExternalLoginCallback vào các url chuyển hướng. Sau đó, trong dự án web của tôi C# App_Start/AuthConfig.cs Tôi đã thay đổi cài đặt Ứng dụng khách để sử dụng ứng dụng khách mới này.

Một lần nữa cảm ơn Jake C cho đề xuất của bạn để thay đổi http port configurations trong Visual Studio. Điều này đã làm cho các trick cho tôi.

+0

Bạn đã có một cái nhìn trong tệp máy chủ của mình trong thư mục Windows32, có lẽ có điều gì đó không ổn? Là localhost definetly ánh xạ tới 127.0.0.1 hoặc có bạn đã xóa nó tại một số điểm có lẽ? – JARRRRG

+0

@Jagga vâng tôi đã làm (xem Chỉnh sửa đầu tiên). Mọi thứ trong 'host32'' hosts-file' là một chú thích, ngoại trừ hai dòng cuối cùng: '127.0.0.1 localhost' và' :: 1 localhost'. Tôi đã thêm tệp hoàn chỉnh tại Chỉnh sửa 4. –

+0

Thử đặt # để nhận xét 2 dòng cuối cùng.Trên tập tin host của tôi, chúng được nhận xét, vì vậy tôi giả sử chúng được nhận xét theo mặc định. – JARRRRG

Trả lời

7

Vì vậy, thông thường lỗi HTTP Hostname không hợp lệ HTTP thường có nghĩa là bạn không có bộ trang web chấp nhận tất cả tên máy chủ và/hoặc địa chỉ IP. Tôi đoán vì đây là một ứng dụng C# mà bạn đang lưu trữ trên IIS. Để khắc phục điều này mở IIS Manager (Win + R và nhập inetmgr), mở rộng máy chủ sau đó Sites, sau đó nhấp chuột phải vào trang web nơi ứng dụng của bạn được lưu trữ và chọn bindings. Trong danh sách này phải có một ràng buộc http cho cổng 54408, bấm đúp vào điều này. Trong địa chỉ IP, hãy đảm bảo rằng Tất cả Unassigned được chọn, và dưới tên Máy chủ lưu trữ, hãy đảm bảo trường này trống. Nhấn OK, sau đó đóng. Cài đặt sẽ có hiệu lực ngay lập tức mà không cần phải đặt lại IIS.

Nếu bạn chỉ thử nghiệm điều này thông qua triển khai web tích hợp của Visual Studio, có các cài đặt tương tự ở trên ở đâu đó trong VS (tôi hơi bị rỉ sét vì vậy tôi không thể nhớ chính xác vị trí hoặc cách thức). Ngoài ra, bạn có thể thiết lập một trang web trong IIS chính xác như thế nào bạn muốn nó và sau đó có VS triển khai đến trang web đó thay vì sử dụng máy chủ nội bộ của riêng mình. Tôi nghĩ rằng có thể có một số nhược điểm gỡ lỗi để làm điều đó theo cách này mặc dù (một lần nữa tôi là một chút mờ về chi tiết, tôi sẽ chỉnh sửa chúng trong khi tôi nhớ chúng hoặc con số nó ra).

Một nền ít nhất là tại sao các thiết lập này tồn tại: Đôi khi một máy chủ cần phải lưu trữ nhiều trang web mà là tất cả để được truy cập thông qua cổng 80. Vì vậy, cho phép nói rằng chúng tôi có foo.combar.com và họ là quá nhỏ để đảm bảo nhận được một máy chủ riêng biệt cho cả hai. Vì vậy, thay vào đó cả hai đều được lưu trữ trên máy chủ với địa chỉ IP là 1.2.3.4. Bây giờ khi bạn nhập URL foo.com vào trình duyệt và nhấn nút, trước tiên, nó sẽ giải quyết tên máy chủ thành 1.2.3.4 và sau đó tạo yêu cầu và một phần yêu cầu đó được gọi là tiêu đề máy chủ. Tiêu đề máy chủ được điền bằng tên máy chủ của URL được nhập, trong trường hợp này là foo.com. Khi máy chủ nhận được yêu cầu, máy chủ sẽ xem tiêu đề máy chủ và phân phối lại nội dung cho foo.com.

Bây giờ nếu bạn cố gắng nhập 1.2.3.4 vào trình duyệt, nó sẽ tạo yêu cầu với tiêu đề máy chủ trống, vì không có chỉ định nào được chỉ định. Khi máy chủ nhận được yêu cầu, nó không biết phải làm gì vì có hai trang web được máy chủ lưu trữ và không có tiêu đề máy chủ nào để chỉ định trình duyệt nào đang tìm kiếm, do đó thay vào đó nó trả về lỗi.

Đây có thể là những gì đang xảy ra trong trường hợp của bạn. Trang web của bạn đang được lưu trữ dưới tên máy chủ localhost và mọi yêu cầu khác không được trả lời. Các cài đặt mà tôi đã chỉ định để thay đổi về cơ bản là nói cho máy chủ biết rằng địa chỉ IP (giao diện mạng) nào đi vào và không có vấn đề gì tên máy chủ đang tìm kiếm, miễn là nó nằm trên cổng 54408, phục vụ trang mạng.

+0

Trang web C# của tôi không được lưu trữ thông qua IIS và 'inetmgr' không phải là lệnh hợp lệ trên máy tính của tôi. Tôi sẽ tìm http ràng buộc cho các cổng trong Visual Studio mặc dù, vì vậy cảm ơn cho đầu vào đó. Cũng nhờ lời giải thích về những gì có thể là nguyên nhân. +1 –

+0

Tôi đã tìm thấy 'cấu hình cổng' trong Visual Studio và quản lý để có được trang chủ làm việc với '127.0.0.1' (xem chỉnh sửa 5), ​​do đó, cảm ơn rất nhiều cho điều đó rồi. Bây giờ tôi chỉ cần khắc phục sự cố với 'url chuyển hướng' trong' Bảng điều khiển API Google 'khi tôi được người giám sát của tôi cho phép chỉnh sửa nó. –

0

Đây có thể không phải là sự cố Android và Windows. Nếu bạn chạy localhost của bạn bằng Visual Studio, bạn sẽ không nhận được nó thông qua 127.0.0.1

Thay vì cố gắng thiết lập IIS tại máy tính của bạn, sau đó triển khai từ Visual Studio để IIS

Ngoài ra, hãy thử sản phẩm UltiDev: http://ultidev.com/products/cassini/CassiniDevGuide.htm http://ultidev.com/products/UWS-Cassini-Pro/Default.aspx

Một số người quản lý để sử dụng đường hầm, nhưng tôi chưa bao giờ thử nó và không có đầu mối những gì để giới thiệu.

Chỉ cần một cái gì đó mà nghe 127.0.0.1 và chuyển hướng dữ liệu từ để nó và localhost

1

Tôi biết đó là một bài hơi cũ. Nhưng giải pháp của tôi có thể giúp ai đó ít nhất một vài phút. Nếu bạn có nhiều liên kết trên trang web bạn đang chạy xóa nó. Chỉ có một với địa chỉ IP: Tất cả Unassigned và HostName được đặt thành Blank enter image description here

8

Nếu bạn đang sử dụng máy chủ web tích hợp của Visual Studio (IIS Express), localhost được ánh xạ theo mặc định; để cho phép 127.0.0.1:

1) Tại đường dẫn:% USERPROFILE% \ Documents \ IISExpress \ config

2) Xác định vị trí tập tin cấu hình: applicationhost.config

3) - tập tin cấu hình mở trong trình soạn thảo (tôi sử dụng notepad ++)

4) tìm kiếm các cổng trang web, ví dụ nếu url thường là localhost: 57.578, tìm kiếm "57.578" và bạn sẽ tìm thấy:

<binding protocol="http" bindingInformation="*:57578:localhost" /> 

5) Thay đổi thứ là mục nhập vào:

<binding protocol="http" bindingInformation="*:57578:*" /> 

6) Lưu và thoát, khởi động lại trang web.

Lưu ý: Bạn sẽ muốn lặp lại quy trình này bất cứ khi nào bạn tạo thư mục ảo mới (thay đổi số cổng Project/Properties/Web/Project Url), tạo mục nhập mới trong tệp applicationhost.config.

5

Trong visual studio 2015 với IIS bày tỏ: đầu tiên trong tính chất dự án thay đổi url dự án từ http://localhost:(Port Không) tới: http://127.0.0.1:(Port Không)

và click vào Create trực quan mục

sau đó đi đến con đường giải pháp của bạn và mở ".vs" dirctory (thư mục bị ẩn) và mở "applicationhost.config"

<sites> 
     <site name="WebSite1" id="1" serverAutoStart="true"> 
      <application path="/"> 
       <virtualDirectory path="/" physicalPath="%IIS_SITES_HOME%\WebSite1" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation=":8080:localhost" /> 
      </bindings> 
     </site> 
     <site name="####" id="2"> 
      <application path="/" applicationPool="Clr4IntegratedAppPool"> 
       <virtualDirectory path="/" physicalPath="E:\Visual Studio 2015\Projects\####\####" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:5050:localhost" /> 
      </bindings> 
     </site> 
     <site name="####(1)" id="3"> 
      <application path="/" applicationPool="Clr4IntegratedAppPool"> 
       <virtualDirectory path="/" physicalPath="E:\Visual Studio 2015\Projects\####\####" /> 
      </application> 
      <bindings> 
       <binding protocol="http" bindingInformation="*:5050:127.0.0.1" /> 
      </bindings> 
     </site> 
     <siteDefaults> 
      <logFile logFormat="W3C" directory="%IIS_USER_HOME%\Logs" /> 
      <traceFailedRequestsLogging directory="%IIS_USER_HOME%\TraceLogFiles" enabled="true" maxLogFileSizeKB="1024" /> 
     </siteDefaults> 
     <applicationDefaults applicationPool="Clr4IntegratedAppPool" /> 
     <virtualDirectoryDefaults allowSubDirConfig="true" /> 
    </sites> 

và thay đổi phần ràng buộc cuối cùng của ứng dụng web của bạn fr om * :(Cổng số): localhost thành * :(Số cổng): 127.0.0.1

và dừng tất cả dự án đang chạy trên IIS Express và khởi động lại chúng.

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