【问题标题】:WebAPI does not initialize?WebAPI 没有初始化?
【发布时间】:2017-08-28 22:28:47
【问题描述】:

我有一个 WebAPI 项目,它作为前端 React+Redux 项目的依赖项。

我创建了一个代码优先数据库,其中的控制器公开了一些 HttpGet 函数,这些函数修改了 DbContext 数据库。

当应用程序运行时,未调用 Startup.ConfigureServices 并且来自 React 的 webapi 调用给我这个错误:

"SyntaxError: Unexpected token

来自不使用 DBcontext 东西的不同控制器的 WebAPI 函数虽然可以工作..

在 LinkController 我有以下内容:

[Route("api/[controller]")]
public class LinkController : Controller
{
    [HttpGet("[action]")]
    public URLSubmitResult SubmitLink(string url)
    {
        return new URLSubmitResult() { Success = true };
    }

    public class URLSubmitResult
    {
        public bool Success { get; set; }
    }
 }

  private readonly LinkDbContext _context;

  public LinkController(LinkDbContext context)
  {
     _context = context;
  }

在 ValuesController 中如下:

 [Route("api/[controller]")]
    public class ValuesController : Controller
    {
    [HttpGet("[action]")]
    public URLSubmitResult SubmitLink(string url)
    {
        return new URLSubmitResult() { Success = true };
    }

    public class URLSubmitResult
    {
        public bool Success { get; set; }
    }

    public ValuesController()
    {

    }

如果我去 api/link/submitlink?url=lol.com 调用不会发生,但如果它是 api/values/submitlink?url=lol.com 会发生

无论我在响应中收到什么错误,实际问题是 api/link/submit 链接不会导致调用控制器函数。 最有可能的情况是返回未定义的结果,该结果不是类型转换为 json。

【问题讨论】:

  • 这个错误发生在哪里?很可能是您尝试传递给 api 函数的数据有问题。
  • 可能您将其发送为 Xml 格式,而 Web Api 正试图反序列化为 Json
  • 不,不是这样,正如我所说的对另一个不依赖 dbcontext 的控制器的类似调用(使用字符串参数)工作正常,初始化函数没有被调用 dbcontext 依赖的控制器。
  • 我看不出 dbcontext 如何影响反序列化。这似乎是巧合。错误清楚地表明内容的第一个标记是
  • 正如我所提到的,两个控制器之间的调用及其主体是相似的,并且无论响应中发生什么,webapi 函数本身都不会在其中一个控制器中调用。 React 中响应正文中的任何问题都是由于未调用 WebApi 函数这一事实造成的,因此尝试追赶是一条红鲱鱼。我已经编辑了我的问题,以便更清楚地说明这一点,因为人们显然不相信我。

标签: c# entity-framework reactjs asp.net-web-api react-redux


【解决方案1】:

所以基本上问题是引用的 WebAPI 程序集没有向依赖注入添加适当的服务。

在我添加的主项目的 Startup.ConfigureServices 中:

 services.AddDbContext<LinkDbContext>(options =>
                    options.UseSqlServer(Configuration.GetConnectionString("LinkDBConnectionString")));

与连接字符串 (LinkDBConnectionString) 一起,依赖注入工作并初始化 WebAPI。

根据更多经验,我发现这个项目设置并不是我真正想要的,它将前端与 WebAPI 分离,包括作为前端依赖的 WebAPI 不是 web 的答案。

我现在将 WebAPI 作为自己的东西在 Visual Studio 中运行,并通过前端对其进行调用。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2020-03-05
    • 2013-11-06
    • 2019-07-14
    • 2023-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多