框架 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 您的示例代码无法编译 - 您正在重新声明 ab。此外,您的示例方法采用两个参数(ab),但您没有在客户端的任何地方提供它们 - 或者,至少,不是以我认识的方式。我可以建议您生成一个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)”的主要内容,如果未能解决你的问题,请参考以下文章

桌面(非 Web)应用程序中的 MVC 框架

我们是不是正在使用 .Net 3.5 中的 MVC 框架转向经典 ASP?

将 Web 应用程序从 2.0 迁移到 3.5 框架的最快和最佳方法?

如何迁移 .NET Framework 应用程序? [3.5 到 2.0]

win10怎么启用net framework 3.5?

实体框架寻找 ADO.NET 提供程序 SqlServerCe.3.5 而不是 4.0