【问题标题】:Asp.net 5 MVC 6 500 Internal Server Error - Angular 2Asp.net 5 MVC 6 500 内部服务器错误 - Angular 2
【发布时间】:2016-03-14 14:56:49
【问题描述】:

我尝试向我的 Web 服务器发布查询,但在未调用控制器的情况下收到 500 内部服务器错误,该控制器从未被初始化。我需要一些帮助来弄清楚我做错了什么。我尝试过基于约定的路由和属性路由,但没有成功。

我是 ASP.NET 5 MVC 6, 角2, 打字稿, DNX 是:1.0.0-rc1-update1 clr x86, Visual Studio 2015 更新 1, IIS Express 10

谢谢!

来自 Angular2 的调用:

public class DataLoader
{
    public loadData = () => {
        var query = new LoadDataQuery();
        var observable = this.get(query);
        observable.subscribe((data: any) => {
            console.log("Data from server: ", data);
       });
    };


    public get = <TResult>(query: Query<TResult>): Observable<TResult> => {
        var queryName = this.getName(query);
        var url = `/query/${queryName}`;
        return this.httpPost<TResult>(url, query);
    };


    private getName = (action: any): string => {
        var regex = /function (.{1,})\(/;
        var results = (regex).exec(action.constructor.toString());
        return (results && results.length > 1) ? results[1] : "";
    };

    private httpPost = <TResult>(url: string, data: any):  Observable<TResult> => {
        var observable = this.http.post(url, data)
            .map<TResult>(response => response.json());
        return observable;
    };
}

我的项目.json:

{
  "version": "1.0.0",
  "compilationOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Movestic.Styles": "1.0.0-*"
  },
  "frameworks": {
    "dnx46": {
      "dependencies": {
        "Pixie.CommandQueryApi": "1.0.0-*"
      }
    }
  },
  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ],
  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel"
  }
}

我的 Startup.cs

我也尝试过属性路由...

public class Startup
{
    // This method gets called by the runtime. Use this method to add services to the container.
    // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IQueryExecutor, QueryExecutor>();
        services.AddSingleton<IQueryTypeCollection, QueryTypeReflectionCollection>();
        services.AddSingleton<ICommandExecutor, CommandExecutor>();
        services.AddSingleton<ICommandTypeCollection, CommandTypeReflectionCollection>();

        services.AddMvc();
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app)
    {
        app.UseMvc(routes =>
        {
            routes.MapRoute(
               name: "queryRouter",
               template: "query/{*queryName}",
               defaults: new { controller = "Query", action = "Handle" });
        });

        app.UseDeveloperExceptionPage();

        // Add the platform handler to the request pipeline.
        app.UseIISPlatformHandler();
        app.UseDefaultFiles();
        app.UseStaticFiles();
    }

    // Entry point for the application.
    public static void Main(string[] args) => WebApplication.Run<Startup>(args);
}

我的控制器:

public class QueryController : Controller
{
    private readonly IQueryExecutor queryExecutor;
    private readonly IQueryTypeCollection queryTypeCollection;

    public QueryController(IQueryExecutor queryExecutor, IQueryTypeCollection queryTypeCollection)
    {
        this.queryExecutor = queryExecutor;
        this.queryTypeCollection = queryTypeCollection;
    }

    public async Task<IActionResult> Handle(string queryName)
    {
        var queryType = this.queryTypeCollection.GetTypeForQueryName(queryName);
        var reader = new StreamReader(this.Request.Body);
        var json = await reader.ReadToEndAsync();
        var query = JsonConvert.DeserializeObject(json, queryType) as IQuery;

        await this.queryExecutor.ExecuteAsync(query);
        return this.Ok();
    }
}

【问题讨论】:

  • 错误出现在哪个 URL 上?
  • 你能发布更多关于错误的信息吗?堆栈跟踪等?

标签: c# asp.net asp.net-mvc angular


【解决方案1】:

通过在 Startup.cs 配置(IApplicationBuilder 应用程序)中打开 app.UseDeveloperExceptionPage(); 解决了问题

【讨论】:

  • 如果您的启动中已经有 app.UseDeveloperExceptionPage(),那么另一个选择是将 webconfig 的环境更改为“开发”,然后您将看到异常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-23
  • 2020-12-11
  • 2011-03-01
  • 2018-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多