C# Asp.net 5 MVC 6 500内部服务器错误-角度2

C# Asp.net 5 MVC 6 500内部服务器错误-角度2,c#,asp.net,asp.net-mvc,angular,C#,Asp.net,Asp.net Mvc,Angular,我试图发布一个查询到我的web服务器,但收到500个内部服务器错误,而没有调用控制器,控制器从未初始化。我需要一些帮助来找出我做错了什么。我尝试过基于约定的路由和属性路由,但没有成功 我是ASP.NET 5 MVC 6, 角度2, 打字稿, DNX is:1.0.0-rc1-update1 clr x86, Visual Studio 2015更新1, IIS Express 10 谢谢 Angular2的电话: public class DataLoader { public load

我试图发布一个查询到我的web服务器,但收到500个内部服务器错误,而没有调用控制器,控制器从未初始化。我需要一些帮助来找出我做错了什么。我尝试过基于约定的路由和属性路由,但没有成功

我是ASP.NET 5 MVC 6, 角度2, 打字稿, DNX is: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;
    };
}
我的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);
}
公共类启动
{
//此方法由运行时调用。请使用此方法将服务添加到容器中。
//有关如何配置应用程序的更多信息,请访问http://go.microsoft.com/fwlink/?LinkID=398940
public void配置服务(IServiceCollection服务)
{
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddSingleton();
services.AddMvc();
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
公共void配置(IApplicationBuilder应用程序)
{
app.UseMvc(路由=>
{
routes.MapRoute(
名称:“queryRouter”,
模板:“query/{*queryName}”,
默认值:新建{controller=“Query”,action=“Handle”});
});
app.UseDeveloperExceptionPage();
//将平台处理程序添加到请求管道。
app.UseIISPlatformHandler();
app.UseDefaultFiles();
app.UseStaticFiles();
}
//应用程序的入口点。
publicstaticvoidmain(字符串[]args)=>WebApplication.Run(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();
    }
}
公共类QueryController:Controller
{
专用只读IQueryExecutor查询执行器;
私有只读IQueryTypeCollection queryTypeCollection;
公共查询控制器(IQueryExecutor queryExecutor,IQueryTypeCollection queryTypeCollection)
{
this.queryExecutor=queryExecutor;
this.queryTypeCollection=queryTypeCollection;
}
公共异步任务句柄(字符串queryName)
{
var queryType=this.queryTypeCollection.GetTypeForQueryName(queryName);
var reader=newstreamreader(this.Request.Body);
var json=await reader.ReadToEndAsync();
var query=JsonConvert.DeserializeObject(json,queryType)作为IQuery;
等待这个.queryExecutor.ExecuteAsync(查询);
返回这个;
}
}

问题通过打开
app.UseDeveloperExceptionPage()解决在Startup.cs Configure(iaapplicationbuilder应用程序)

中哪个URL出现错误?您可以发布有关错误的更多信息吗?stacktrace等?如果启动时已经有app.UseDeveloperExceptionPage(),那么另一个选项是将webconfig的环境更改为“开发”,然后您将看到异常。
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();
    }
}