从另一台电脑访问 .net web api
Reach .net web api from another pc
我正在做一个项目,我需要为客户提供一个 REST API,它将 return 一些数据以 JSON 格式形成数据库。
'到目前为止,这是我的控制器代码:
[Models.AllowCors]
public HttpResponseMessage Get(string Id)
{
string ClearName = Id.Replace("_", " ");
IQueryable<Models.User> userQuery =
from user in Models.TableAccesser.Users_Table where
user.Name == ClearName
select user;
return Request.CreateResponse(HttpStatusCode.OK, userQuery);
}
我遇到的问题是我只能从运行网络 api 的同一台电脑上访问 api。
我可以像这样通过 link 到达:
my_ip:54780/users/parameters
如果我从同一台电脑上打电话,它工作正常,但我无法从另一台电脑上打电话。我尝试以几种方式允许 cors,但都没有用。我试过:
在 webapiconfig.cs 中启用 cors:
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
没用
然后我尝试在 web.config 中添加一个新条目:
<add name="Access-Control-Allow-Origin" value="*"/>
这都不起作用
然后我尝试的最后一件事是添加一个函数:
public class AllowCors : ActionFilterAttribute
{
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (actionExecutedContext == null)
{
throw new ArgumentException("ActionExecutedContext");
}
else
{
actionExecutedContext.Response.Headers.Remove("Access-Control-Allow-Origin");
actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*");
}
base.OnActionExecuted(actionExecutedContext);
}
}
我尝试使用另一台电脑的邮递员和 xmlhttprequest,ajax,但都没有用。有大约 20 秒的延迟,然后什么都没有,如果我尝试写出 response.responseText,它只是一个 "error",仅此而已。
您能给我一些想法吗,我可以尝试访问 API 吗?此 API 将在移动应用程序中使用,因此它应该适用于简单的请求。
感谢您的回复。
根据您的问题,您似乎需要在 Web API 机器上打开端口。在您的情况下,您需要打开端口 54780
打开您的端口非常容易,这里是 Microsoft 页面,其中包含有关如何操作的说明:
Open a port in Windows Firewall
打开 Windows 防火墙,方法是单击“开始”按钮 “开始”按钮的图片,然后单击“控制面板”。在搜索框中,键入防火墙,然后单击 Windows 防火墙。
在左窗格中,单击“高级设置”。需要管理员权限如果系统提示您输入管理员密码或进行确认,请键入密码或进行确认。
在 Windows 高级安全防火墙对话框的左窗格中,单击入站规则,然后在右窗格中单击新建规则。
按照新建入站规则向导中的说明将端口 54780 添加到您的规则。
请注意,如果您使用的是第三方防火墙,例如使用您的防病毒软件,您需要在该应用程序中打开端口。
我正在做一个项目,我需要为客户提供一个 REST API,它将 return 一些数据以 JSON 格式形成数据库。 '到目前为止,这是我的控制器代码:
[Models.AllowCors]
public HttpResponseMessage Get(string Id)
{
string ClearName = Id.Replace("_", " ");
IQueryable<Models.User> userQuery =
from user in Models.TableAccesser.Users_Table where
user.Name == ClearName
select user;
return Request.CreateResponse(HttpStatusCode.OK, userQuery);
}
我遇到的问题是我只能从运行网络 api 的同一台电脑上访问 api。 我可以像这样通过 link 到达:
my_ip:54780/users/parameters
如果我从同一台电脑上打电话,它工作正常,但我无法从另一台电脑上打电话。我尝试以几种方式允许 cors,但都没有用。我试过:
在 webapiconfig.cs 中启用 cors:
var cors = new EnableCorsAttribute("*", "*", "*"); config.EnableCors(cors);
没用
然后我尝试在 web.config 中添加一个新条目:
<add name="Access-Control-Allow-Origin" value="*"/>
这都不起作用
然后我尝试的最后一件事是添加一个函数:
public class AllowCors : ActionFilterAttribute { public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext) { if (actionExecutedContext == null) { throw new ArgumentException("ActionExecutedContext"); } else { actionExecutedContext.Response.Headers.Remove("Access-Control-Allow-Origin"); actionExecutedContext.Response.Headers.Add("Access-Control-Allow-Origin", "*"); } base.OnActionExecuted(actionExecutedContext); } }
我尝试使用另一台电脑的邮递员和 xmlhttprequest,ajax,但都没有用。有大约 20 秒的延迟,然后什么都没有,如果我尝试写出 response.responseText,它只是一个 "error",仅此而已。
您能给我一些想法吗,我可以尝试访问 API 吗?此 API 将在移动应用程序中使用,因此它应该适用于简单的请求。
感谢您的回复。
根据您的问题,您似乎需要在 Web API 机器上打开端口。在您的情况下,您需要打开端口 54780
打开您的端口非常容易,这里是 Microsoft 页面,其中包含有关如何操作的说明: Open a port in Windows Firewall
打开 Windows 防火墙,方法是单击“开始”按钮 “开始”按钮的图片,然后单击“控制面板”。在搜索框中,键入防火墙,然后单击 Windows 防火墙。
在左窗格中,单击“高级设置”。需要管理员权限如果系统提示您输入管理员密码或进行确认,请键入密码或进行确认。
在 Windows 高级安全防火墙对话框的左窗格中,单击入站规则,然后在右窗格中单击新建规则。
按照新建入站规则向导中的说明将端口 54780 添加到您的规则。
请注意,如果您使用的是第三方防火墙,例如使用您的防病毒软件,您需要在该应用程序中打开端口。