框架 3.5 的桌面应用程序中的“远程服务器返回错误:(404)”
Posted
技术标签:
【中文标题】框架 3.5 的桌面应用程序中的“远程服务器返回错误:(404)”【英文标题】:"The remote server returned an error: (404)" in desktop application for framework 3.5 【发布时间】:2021-11-22 06:47:49 【问题描述】:我正在为我的桌面应用程序使用 API。该应用程序在 dot.net framework 3.5 上运行。
我有一个可以完美运行的 API,但是当我从桌面应用程序调用 API 时,出现错误:
“远程服务器返回错误:(404)”
但是我的 API 运行没有问题。我有两个参数,将在 URL 中传递。
这是我的代码:
string url = "http://localhost:58167/api/Project/";
string data = "65354/19216882";
string response;
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
response = client.UploadString(url, "POST", data);
我该如何解决这个问题?
编辑: 以下是说明 API 外观的代码:
// GET api/Project
public string GetProjects(string key, string IP)
string sql = "";
string en = "";
if (IP == "19216")
sql = "garbage1";
if (IP == "19882")
sql = " garbage2";
if (IP == "181249")
sql = " garbage3";
if (IP == "85206")
sql = " garbage4";
if (IP == "87249")
sql = " garbage5";
en = CryptorEngine.Encrypt(sql, key);
return en;
【问题讨论】:
使用 Fiddler 之类的工具来捕获发送到 API 的工作请求,并捕获发送到 API 的失败请求。使用 WinMerge 之类的差异工具比较两者,您会找到答案 :) 所以你有一个服务器,它有 API 并监听端口58167
和端点 /api/Project/
。您正在向其发送“POST”类型的 HTTP 消息,服务器回复 404 - 找不到页面。对吗?
请向我们展示服务器端点的代码,其中值(/api/Project/
的路径和端口号)是可见的。
// GET api/Project public string GetProjects(string a, string b) string a= "something";字符串 b="something1";结果 = a+b;返回结果; 这只是示例代码。但原始代码几乎相同。
@percy 您的示例代码无法编译 - 您正在重新声明 a
和 b
。此外,您的示例方法采用两个参数(a
和 b
),但您没有在客户端的任何地方提供它们 - 或者,至少,不是以我认识的方式。我可以建议您生成一个MVCE 来证明您的问题吗?如果您不向我们展示真正的问题,我们很难为您提供帮助......
【参考方案1】:
尝试将属性路由添加到您的 API
Route[("~/api/Project/key/ip")]
public string GetProjects(string key, string IP)
你的代码
string url = "http://localhost:58167/api/Project/65354/19216882";
string response;
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
response = client.UploadString(url, "GET");
如果你无法控制 api
您可以使用现有的操作
Route[("~/api/Project")]
public string GetProjects(string key, string IP)
代码
string url = "http://localhost:58167/api/Project?key=65354&IP=19216882";
string response;
WebClient client = new WebClient();
client.Encoding = Encoding.UTF8;
response = client.UploadString(url, "GET");
如果您仍然需要使用 POST,则必须修复 acion
public class ViewModel
public string Key get; set;
public string IP get; set;
Route[("~/api/Project")]
public string GetProjects([FromBody]ViewModel model)
【讨论】:
在我的 API 中使用了属性路由并在我的代码中尝试第一个。但仍然收到错误“远程服务器返回错误:(415)不支持的媒体类型。” @percy 将 [FromBody] 添加到输入参数中 Route[("~/api/Project/key/ip")] public string GetProjects([FromBody] string key, [FromBody] string IP) 这样? @percy 不,不是。看我回答的最后一行 谢谢大家。我得到了解决,我更新了有问题的更新代码。只需将 uploadstring 更改为 downloadstring 。和宾果游戏.. 它有效。以上是关于框架 3.5 的桌面应用程序中的“远程服务器返回错误:(404)”的主要内容,如果未能解决你的问题,请参考以下文章
我们是不是正在使用 .Net 3.5 中的 MVC 框架转向经典 ASP?
将 Web 应用程序从 2.0 迁移到 3.5 框架的最快和最佳方法?