.Net Core 的http请求问题

k80676535 2016-12-20 05:28:16
使用 vs for mac 生成的.net站点,其中

Startup.cs:
namespace vs_core_web
{
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 https://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(IServiceCollection services)
{
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole();

if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}

app.Run(async (context) =>
{
await (new testClass()).OutPutString(context); // 此处是会返回当前 testClass 类初始化的次数
});
}
}
}


namespace vs_core_web
{
public class testClass
{
static int runtimes = 0;
public testClass()
{
runtimes++;
}

public Task OutPutString(HttpContext context)
{
return context.Response.WriteAsync("Hello World!"+ runtimes.ToString());
}
}
}

await (new testClass()).OutPutString(context); 这一个部分的代码,请求一次http,会触发两次,是什么情况,有人知道么?
干净的新项目也是一样这个问题...

求教~

页面请求的结果(多次):
Hello World!1
Hello World!3
Hello World!5
Hello World!7
.....

尾数永远是单数
...全文
838 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
k80676535 2016-12-22
  • 打赏
  • 举报
回复
看来这个只能再观望一下了
闭包客 2016-12-21
  • 打赏
  • 举报
回复
还有就是你的代码使用了两处异步处理。 改成同步的会有利于你排除问题。在这之后再写成异步调用。
闭包客 2016-12-21
  • 打赏
  • 举报
回复
这对在 windows 下使用 asp.net 的程序员有点陌生。 仅从代码上看,你可能有在其他地方调用 testClass 的构造函数。我相信这不是 .net core 的环境不同造成的。 我建议你写一个 testClass 构造函数的重载:

public testClass(bool myCall)
{
    if(myCall)
        runtimes++;
}
只在需要的地方累加 runtimes 去隔离这个问题。
earlsen 2016-12-21
  • 打赏
  • 举报
回复
未用过,帮顶!
k80676535 2016-12-21
  • 打赏
  • 举报
回复
有人用.net core 么?
闭包客 2016-12-21
  • 打赏
  • 举报
回复
引用 7 楼 k80676535 的回复:
[quote=引用 6 楼 closurer 的回复:] [quote=引用 5 楼 k80676535 的回复:] [quote=引用 4 楼 closurer 的回复:] 还有就是你的代码使用了两处异步处理。 改成同步的会有利于你排除问题。在这之后再写成异步调用。
新建的工程,断点 app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); await这一行,会发现刷新一次网页,会触发两次断点。 前一次的会被后一次覆盖 加了计数显示的是为了在输出的位置能看到效果[/quote] 这我就看不出来什么问题了,我也想有 Mac 可以跑一下……[/quote] 说好了跨平台,win下应该也是一样的?[/quote] 午饭的时候跟同事聊了一下天,他说现在 .net core 在预览版,但我觉得即使这样也不至于有这种错误。 跨平台也无法完全使其依赖的环境透明的。
k80676535 2016-12-21
  • 打赏
  • 举报
回复
引用 6 楼 closurer 的回复:
[quote=引用 5 楼 k80676535 的回复:] [quote=引用 4 楼 closurer 的回复:] 还有就是你的代码使用了两处异步处理。 改成同步的会有利于你排除问题。在这之后再写成异步调用。
新建的工程,断点 app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); await这一行,会发现刷新一次网页,会触发两次断点。 前一次的会被后一次覆盖 加了计数显示的是为了在输出的位置能看到效果[/quote] 这我就看不出来什么问题了,我也想有 Mac 可以跑一下……[/quote] 说好了跨平台,win下应该也是一样的?
闭包客 2016-12-21
  • 打赏
  • 举报
回复
引用 5 楼 k80676535 的回复:
[quote=引用 4 楼 closurer 的回复:] 还有就是你的代码使用了两处异步处理。 改成同步的会有利于你排除问题。在这之后再写成异步调用。
新建的工程,断点 app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); await这一行,会发现刷新一次网页,会触发两次断点。 前一次的会被后一次覆盖 加了计数显示的是为了在输出的位置能看到效果[/quote] 这我就看不出来什么问题了,我也想有 Mac 可以跑一下……
k80676535 2016-12-21
  • 打赏
  • 举报
回复
引用 4 楼 closurer 的回复:
还有就是你的代码使用了两处异步处理。 改成同步的会有利于你排除问题。在这之后再写成异步调用。
新建的工程,断点 app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); await这一行,会发现刷新一次网页,会触发两次断点。 前一次的会被后一次覆盖 加了计数显示的是为了在输出的位置能看到效果

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧