gpt4 book ai didi

c# - 为什么我的 Web API 的响应格式不正确?

转载 作者:太空狗 更新时间:2023-10-29 17:56:18 25 4
gpt4 key购买 nike

我有一个非常基本的 Web API 示例,它是使用 example code from this tutorial 构建的:

代码

相关的 Web.config 部分

  <system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<handlers>
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>

路由配置

public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}

查看模型

public class Survey
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}

API Controller

public class SurveysController : ApiController
{
public IEnumerable<Survey> All()
{
using (ITSurveyEntities model = new ITSurveyEntities())
{
return new List<Survey>(
from s in model.Surveys
select new Survey
{
Id = s.Id,
Name = s.Name,
Description = s.Description,
});
}
}
}

它利用 ITSurveyEntities,它是从数据库生成的 ADO.NET 实体数据模型,目前只包含一个表,Survey

简而言之,我不认为我想在这里做任何特别的事情。

当前结果

当我尝试使用类似 http://localhost:1681/api/surveys 的方式导航到 API 时,我收到了响应,但该文件名为 surveys 没有扩展名。此外,如果我尝试 Save As 并给它一个 txt 扩展名,下载就会失败。

预期结果

我希望 API 会返回一个文件名 surveys.json,就像示例项目对 products 所做的那样,浏览器会要求我打开或保存文件。

我尝试过的

比较 Web.config 文件

我比较了我的项目和教程中有效的示例代码之间的 Web.config 文件。

比较路由

我比较了我的项目和教程中有效的示例代码之间的路由配置。

不包括 WebDav

我试图排除 WebDav,因为我的搜索表明它可能是原因。我通过以匹配 what's on this blog 的方式修改 Web.config 来做到这一点.

更新 1

好的,在 Joe Enos 的指导下,我发现问题是 View 模型也被命名为 Survey,因此它抛出了关于 CLR 类型和 EDM 类型之间的歧义的错误。

我通过将 View 模型重命名为 SurveyViewModel 解决了这个问题,并且对 http://localhost:1681/api/surveys 的请求现在返回一个 HTTP 200 并按预期下载文件。

最佳答案

如果您使用 Fiddler 或浏览器的开发工具查看原始请求和响应,您应该会找到一些关于问题的线索。

关于c# - 为什么我的 Web API 的响应格式不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18130751/

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