我正在使用Asp.Net Core Azure Web App为客户端提供RESTful API,而客户端无法正确处理分块.
是否Transfer-Encoding: chunked可以在控制器级别或web.config中完全关闭?
编辑:我正在返回一个像这样的JsonResult:
[HttpPost]
[Produces( "application/json" )]
public IActionResult Post( [FromBody] AuthRequest RequestData )
{
AuthResult AuthResultData = new AuthResult();
return Json( AuthResultData );
}
Run Code Online (Sandbox Code Playgroud) 我有一个在ASP.NET Core 1.0 RC2上运行的控制器,我想将原始POST数据转储到遥测中,因为ApplicationInsights不会为您执行此操作.我的代码看起来像这样
[HttpPost]
[Produces("application/json")]
public IActionResult Post([FromBody] RequestClass RequestData)
{
var stream = this.HttpContext.Request.Body;
stream.Position = 0;
using (var reader = new StreamReader(stream))
{
string body = reader.ReadToEnd();
Telemetry.TrackTrace(body, Microsoft.ApplicationInsights.DataContracts.SeverityLevel.Information);
}
return Ok();
}
Run Code Online (Sandbox Code Playgroud)
但字符串"body"总是空着.如果我从函数签名中删除[FromBody]装饰,那么此代码可以工作,但RequestData对象只包含null,这不是我想要的.
我唯一能想到的就是将RequestData转换回Json字符串,但这感觉很笨拙而且很慢.
(编辑:POST数据是Json)
我有一个写入EventHub的AspNetCore Web应用程序和一个从其中读取的Webjob。我希望该事务的两个部分的遥测在Application Insights中都具有相同的操作ID。
因此,当我要将数据发送到EventHub时,我尝试从TelemetryClient中拉出操作ID,例如
var myOperationId = MyTelemetryClient.Context.Operation.Id;
Run Code Online (Sandbox Code Playgroud)
但这总是使我无效。我找到了这篇文章,并尝试使用
var request.HttpContext.Items["Microsoft.ApplicationInsights.RequestTelemetry"] as RequestTelemetry;
Run Code Online (Sandbox Code Playgroud)
但再次为空。在需要时可以提取该值的任何指针吗?
我的代码如下所示:
public class Startup
{
public void ConfigureServices( IServiceCollection IServices )
{
var builder = TelemetryConfiguration.Active.TelemetryProcessorChainBuilder;
builder.Use((next) => new MyTelemetryProcessor(next));
builder.Build();
var aiOptions = new Microsoft.ApplicationInsights.AspNetCore.Extensions.ApplicationInsightsServiceOptions();
aiOptions.EnableQuickPulseMetricStream = true;
IServices.AddApplicationInsightsTelemetry( Configuration, aiOptions);
IServices.AddMvc();
IServices.AddOptions();
TelemetryClient AppTelemetry = new TelemetryClient();
AppTelemetry.InstrumentationKey = InsightsInstrumentationKey;
IServices.AddSingleton(typeof(TelemetryClient), AppTelemetry);
}
public void Configure( IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory )
{
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
var configuration = app.ApplicationServices.GetService<TelemetryConfiguration>();
configuration.TelemetryInitializers.Add(new …Run Code Online (Sandbox Code Playgroud) 我目前正在一起使用Polly和Flurl,但是我有一个通用的重试策略,必须添加到每个请求中。我注意到Polly允许您使用AddPolicyHandler(...)设置默认值,但这需要IHttpClientBuilder,而且我看不到任何从Flurl掌握此方法的方法。
我以为可以重载DefaultHttpClientFactory,但这只能使我可以访问HttpClient,而不能访问IHttpClientBuilder。
我知道我可以制作自己的HttpClients并将它们传递给Flurl,但我宁愿避免这种情况,因为我希望Flurl管理它们的生命周期。
目前有什么方法可以做我想做的事吗?
如果我有一个具有两个模板参数的类,有没有办法在其中一个参数上分支 if constexpr?在下面的示例中,我可以测试两个参数是否匹配,但我想要一种匹配任何版本的 MyTemplateClass 的方法,该版本将 char 作为其第一个参数。
#include <iostream>
#include <type_traits>
template<typename T,int32_t N>
class MyTemplateClass
{
};
template<typename C>
void DoStuff(const C& myObj)
{
if constexpr(std::is_base_of_v<MyTemplateClass<char,64>, C>) // how do I remove the hardcoded 64?
{
// test passed!
}
else
{
static_assert(false);
}
}
int main()
{
MyTemplateClass<char, 64> passesObj;
MyTemplateClass<char, 128> shouldPassObj;
MyTemplateClass<wchar_t, 64> failsObj;
DoStuff(passesObj); // passes correctly
DoStuff(shouldPassObj); // currently fails, want to make pass
DoStuff(failsObj); // correctly fails
}
Run Code Online (Sandbox Code Playgroud)