【发布时间】: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 中的<configuration> 节点中添加了以下内容,然后再开始尝试这些帖子中的任何一个。它位于<configSections> 节点之后。
<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