【问题标题】:POST to WebApi through Fiddler2通过 Fiddler2 发布到 WebApi
【发布时间】:2014-07-30 13:27:31
【问题描述】:

我正在阅读一本书以了解有关 MVC 的 WebAPI 控制器的更多信息,但遇到了一个问题。我正在尝试使用 Fiddler 发布到我的 WebAPI 控制器(在 Visual Studio 2010 中),但无法连接到我的控制器。

我在本书中使用了以下课程:

public class Employee {
    public int      Id          { get; set; }
    public string   FirstName   { get; set; }
    public string   LastName    { get; set; }
    public int      Department  { get; set; }
}

我的 WebApi Controller POST 方法,在第一个 var maxId = ... 行上有一个断点:

public class EmployeesController : ApiController {
    public HttpResponseMessage Post(Employee employee) {
        var maxId = list.Max(e => e.Id);
        employee.Id = maxId + 1;

        list.Add(employee);

        var response = Request.CreateResponse<Employee>(HttpStatusCode.Created, employee);

        string uri = Url.Link("DefaultApi", new { id = employee.Id });
        response.Headers.Location = new Uri(uri);
        return response;
    }
}

我可以毫无问题地通过 Fiddler2 发布 GET(重新运行我从 Chrome 跟踪的请求:

然后我尝试调整标头以运行 POST,并在使用“localhost”作为我的服务器时收到 404:

根据许多建议,我尝试将服务器更改为“localhost。”,但收到相同的 404:

我最后一次尝试将“localhost”更改为我的计算机名称,但在它尝试发布一秒钟左右后却收到了 502(这与前两个请求的内容相同,但仅将上述命名更改为 url):

根据书中和在线的其他一些建议,我还在我的 Web.config 中的&lt;configuration&gt; 节点中添加了以下内容,然后再开始尝试这些帖子中的任何一个。它位于&lt;configSections&gt; 节点之后。

<system.net>
  <defaultProxy>
    <proxy usesystemdefault="False" bypassonlocal="True" proxyaddress="http://127.0.0.1:8888"/>
  </defaultProxy>
</system.net>

对我缺少什么有任何想法吗?到目前为止,在我所有的研究中,this StackOverflow question 一直是最能帮助我的,但我已经尝试过那里唯一答案的建议,甚至视频也没有给我更多的见解。

在这一点上,如果其中一部分与 Visual Studio 2010 有关,我不会感到惊讶,除非我错过了一些完全简单的东西。

【问题讨论】:

  • 您的端口看起来像是 .NET 调试器与 IIS Express 使用的端口,您停止调试了吗?您可能希望直接使用 IIS 对其进行设置,以便它始终存在。右键单击您的 Web 项目,查看属性,然后查看“Web”部分。
  • 是的,我只是使用默认调试器。我按照您的指示从“使用 Visual Studio 开发服务器”切换到“使用本地 IIS Web 服务器”,并将所有内容保留为默认值。你指的是那个吗?
  • 这解决了您的问题吗?我相信,当解决方案打开时,应该会自动将您的应用程序注册到本地 IIS。基本上,我的意图是使用 IIS Express,如果它通常仅在 Visual Studio 绑定到它时可用,因此如果您停止调试,您将收到 404,因为该端点不再注册任何内容。使用本地 IIS,它始终可用,当您需要调试时,Visual Studio 会自动绑定到 w3p.exe 进程。
  • 不,我会在尝试使用 Fiddler 时让我的应用程序继续运行。我知道如果我不这样做会立即失败。我尝试了上面描述的设置,并尝试在不调试的情况下运行,我在浏览器中收到错误“500 - 内部服务器错误在 ISAPI 过滤器上调用 LoadLibraryEx”C:\Windows\Microsoft.NET\Framework\v4.0.30319 \\aspnet_filter.dll“失败”。我没有触及其他设置。
  • 您无需对代理设置进行任何操作即可使用 Fiddler 的 Composer。您也不需要使用localhost. 或机器名称;这些都是在某些情况下进行代理所需的技巧,但在这种情况下您根本没有使用代理。 WebAPI 是否不要求您有某种注释才能将 POST 正确路由到给定方法?

标签: visual-studio-2010 post asp.net-web-api localhost fiddler


【解决方案1】:

您确定已定义默认路由吗? 它应该是这样的:

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

【讨论】:

  • 是的,我确实在我的 WebApiConfig 中定义了它(所以 config.Routes.MapHttpRoute 而不是 routes.MappHttpRoute),如果我没有直接从浏览器调用并从 Fiddler 调用(第一张照片)也会失败。
  • 不正确。您可以拥有多个路由,并且您可以重写默认路由并保留名称。无论如何,您使用的是哪个 Web API 版本?
  • 是的,我知道您可以定义多条路线,但是您共享的路线是我唯一拥有的路线。我正在使用作为 MVC 4 一部分的 Web API。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 2013-05-13
  • 2018-09-10
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多