我创建了一个非常简单的Web API控制器,用于响应简单的Ping调用。问题在于它仅答复IPv6请求,而不答复IPv4。
[HttpGet]
[Route("api/test/ping")]
public HttpResponseMessage Ping()
{
return Request.CreateResponse(HttpStatusCode.OK,
"The Web Api is alive. " + Request.RequestUri.ToString());
}
当我使用以下命令进行测试时,它运行良好:
http://localhost:20080/api/test/ping
当我用机器名称尝试时,它也能很好地工作:
http://mymachine:20080/api/test/ping
但是当我尝试使用IP地址时它不会答复:
http://192.168.1.131:20080/api/test/ping
我在计算机上的网络设置中同时运行IPv4和IPv6。 当我键入(在控制台窗口中)
> ping 192.168.1.131
我确实得到了很好的回应:
Reply from 192.168.1.131: bytes=32 time<1ms TTL=128
Reply from 192.168.1.131: bytes=32 time<1ms TTL=128
Reply from 192.168.1.131: bytes=32 time<1ms TTL=128
Reply from 192.168.1.131: bytes=32 time<1ms TTL=128
在控制台窗口中键入时
> ping mymachine
我也得到了很好的答复,但是使用了IPv6:
Reply from fe80::d1b4:bd5a:1b66:a7c4%4: time<1ms
Reply from fe80::d1b4:bd5a:1b66:a7c4%4: time<1ms
Reply from fe80::d1b4:bd5a:1b66:a7c4%4: time<1ms
Reply from fe80::d1b4:bd5a:1b66:a7c4%4: time<1ms
我已经尝试在HttpSelfHostServer中进行此操作,并在我的计算机上的IIS中运行它。结果相同。 问题是我想从我当地的办公室外面使用它。通过路由器,路由器的端口转发仅支持IPv4。
默认使用WebApiConfig:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我认为这应该很容易解决,但是我还没有找到解决方案。该怎么解决?