gpt4 book ai didi

c# - MVC ASP.NET 中未正确接收 HttpWebRequest

转载 作者:太空宇宙 更新时间:2023-11-03 16:20:56 25 4
gpt4 key购买 nike

这是我公开记录我的错误,这样如果我或任何人再次犯下这样的错误,他们就不必花 3 个小时来解决这么简单的问题。

上下文

我正在从一个 C# MVC ASP.NET 应用程序向另一个应用程序发送一个 HttpRequest。应用程序需要 HTTPS 连接,我们使用 URLRewrite 将 HTTP 请求重定向到 HTTPS url。

一个应用程序正在发送一个正文中包含一些 JSON 数据的 POST 请求,非常标准的东西。另一个应用程序设置为使用 MVC Controller 类(分别用于 GET 和 POST 的 CollectionAction 和 Insert 方法)接收此数据。

问题的症状

接收应用程序正在运行 GET 方法 (CollectionAction) 而不是 POST 操作 (ItemAction)。原因是进入应用程序的请求实际上是 GET 请求,最重要的是,JSON 数据也丢失了。

我发送了 header “x-http-method”以覆盖从 GET 到 POST 的请求方法(我已经将请求 httpmethod 设置为 POST,但这被忽略了)。这有效,但我仍然没有发送任何数据。

所以现在我被困住了,因为我可以看到一个带有内容长度和数据的 POST 请求被发送出去,而我有一个 GET 请求没有数据或内容长度进来(但标题被保留了)

最佳答案

原来我使用 UriBuilder 获取基本 URL 并向其应用资源路径。例如,我的 web.config 中会有“google.com”,然后 UriBuilder 会获取像 Pages 这样的资源并构建 url“google.com/Pages”。不幸的是,我没有使用基本 URL 初始化 UriBuilder,而是使用第二个 UriBuilder 来提取主机并将其添加到路径中,如下所示:

public Uri GetResourceUri(string resourceName)
{
var domain = new UriBuilder(GetBaseUrl());
var uribuilder = new UriBuilder()
{
Path = domain.Path.TrimEnd('/') + "/" + resourceName.TrimStart('/'),
Host = domain.Host
};
var resourceUri = uribuilder.Uri;
return resourceUri;
}

此代码的问题在于方案被忽略(HTTP://与 HTTPS://)并且它默认为 HTTP。所以我的客户端将请求发送到 HTTP url 而不是所需的 HTTPS url。这是有趣的部分,URLRewrite 介入并说我们需要转到 HTTPS url,所以它将我们重定向到那里。但在这样做时,它忽略了 Http-Method 和 POST 数据,它们刚刚设置为默认 GET 和 null。这是第二个应用程序可以在接收端看到的内容。

因此必须将函数重写为解决问题的函数:

public Uri GetResourceUri(string resourceName)
{
var baseUrl = GetBaseUrl();
var domain = new UriBuilder(baseUrl);
var uribuilder = new UriBuilder(baseUrl)
{
Path = domain.Path.TrimEnd('/') + "/" + resourceName.TrimStart('/'),
};
var resourceUri = uribuilder.Uri;
return resourceUri;
}

关于c# - MVC ASP.NET 中未正确接收 HttpWebRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13907431/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com