.net-core - .Net Core Web API Get函数不返回数据
问题描述
我有一个曾经可以工作的 .NET Core GET 函数,但无论出于何种原因,它不再返回数据。我已经在 Fiddler 中测试过了。我发誓自上次测试以来我没有更改函数本身的任何内容。我所做的唯一可能影响它的是将项目从 .Net Core 2.1 升级到 .Net Core 3.1。
获取函数:
[HttpGet]
[Produces(typeof(FrameImageDTO))]
public IQueryable GetAll()
{
var results = from f in _context.Frames
where f.Child.ParentId == LoggedInUser.ParentId
select new FrameImageDTO(f);
Request.HttpContext.Response.Headers.Add("X-Total-Count", _frameRepository.GetAll().Count().ToString());
return results;
}
DTO:
public class FrameImageDTO
{
public byte[] ImageData;
public float XPosition;
public float YPosition;
public float ZPosition;
public float XRotation;
public float YRotation;
public float ZRotation;
public string FrameName;
public long ChildId;
public FrameImageDTO(Frames frame)
{
if (frame == null) return;
XPosition = frame.XPosition;
YPosition = frame.YPosition;
ZPosition = frame.ZPosition;
XRotation = frame.XRotation;
YRotation = frame.YRotation;
ZRotation = frame.ZRotation;
FrameName = frame.FrameName;
ChildId = frame.ChildId;
// Retrieve file
string filename = frame.Filename;
FileStream fileStream = new FileStream(Path.Combine(Directory.GetCurrentDirectory(), "User Image Store", filename), FileMode.Open);
var bytesToRead = (int)fileStream.Length;
ImageData = new byte[bytesToRead];
fileStream.Read(ImageData, 0, bytesToRead);
fileStream.Close();
}
}
当我在 GET 函数中设置断点来检查“结果”的内容时,它填充了数据,但是当我在 Fiddler 中对其进行测试时,没有数据。
编辑:
我记得我改变的是 Startup。我有另一个 Web API 项目,它的启动类比这个更干净,所以我用它作为清理这个的基础。这里有什么看起来不合适或丢失的东西吗?到目前为止,我已经尝试了所有方法,它似乎唯一想要返回的是一个 ObjectResult。
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<ICountryRepository, CountryRepository>();
services.AddScoped<IParentRepository, ParentRepository>();
services.AddScoped<IChildRepository, ChildRepository>();
services.AddScoped<IDiaryEntryRepository, DiaryEntryRepository>();
services.AddScoped<IDiaryRepository, DiaryRepository>();
services.AddScoped<IImageRepository, ImageRepository>();
services.AddScoped<IFrameRepository, FrameRepository>();
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer("Blah Blah"), ServiceLifetime.Transient);
services.AddIdentity<ApplicationUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>().AddDefaultTokenProviders();
services.AddHttpContextAccessor();
services.AddControllers();
services.AddRazorPages();
services.AddHttpContextAccessor();
services.AddControllers();
services.ConfigureApplicationCookie(options =>
{
options.LoginPath = $"/Identity/Account/Login";
options.LogoutPath = $"/Identity/Account/Logout";
options.AccessDeniedPath = $"/Identity/Account/AccessDenied";
});
services.AddSingleton<IActionContextAccessor, ActionContextAccessor>();
services.AddSingleton<IEmailSender, EmailSender>();
services.AddTransient<IPrincipal>(provider => provider.GetService<IHttpContextAccessor>().HttpContext.User);
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseAuthentication();
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapRazorPages();
});
// For Unity WebGL integration
app.UseFileServer();
StaticFileOptions staticFileOptions = new StaticFileOptions()
{
FileProvider = new PhysicalFileProvider(
Path.Combine(Directory.GetCurrentDirectory(), @"Template")),
RequestPath = new PathString("/template")
};
app.UseStaticFiles(staticFileOptions);
FileExtensionContentTypeProvider contentTypeProvider = (FileExtensionContentTypeProvider)staticFileOptions.ContentTypeProvider ??
new FileExtensionContentTypeProvider();
contentTypeProvider.Mappings.Add(".unityweb", "application/octet-stream");
staticFileOptions.ContentTypeProvider = contentTypeProvider;
app.UseStaticFiles(staticFileOptions);
// If Unity doesn't work, consider changing or deleting this line
//app.UseStaticFiles(new StaticFileOptions
//{
// FileProvider = new PhysicalFileProvider(Path.Combine(env.ContentRootPath, "User Image Store")),
// RequestPath = "/ImageStore"
//});
//CreateRoles(serviceProvider);
}
解决方案
推荐阅读
- javascript - Moment.js 更改午夜时间重置
- python - 在具有不同移位长度的多列上使用 pandas .shift
- javascript - Sedo api 响应错误——SOAP Javascript 客户端
- asp.net - 如何向 NEST 添加多个字段?
- javascript - Vue 3 composition api typescript 从路由查询中填充对象属性
- vba - 对于移动文件夹的每个循环遍历文件夹正在跳过一些文件夹
- java - TelephonyManager 为所有参数抛出错误。用户 10449 不满足访问设备标识符的要求
- java - 从空 sharedpreference 中检索 json 数组时,java.lang.String 无法转换为 JSONObject 异常出现
- javascript - Javascript _ 点符号和括号符号
- android - 颤动路径错误 PATH="$PATH":"$HOME/.pub-cache/bin"