使用端点映射时如何读取请求正文?
How am I able to read the Request-Body when using endpoint mapping?
对不起,伙计们,这似乎是一个新手问题,但我以前从未使用过端点映射,而且似乎无法弄清楚。
所以我写了一个监听请求的服务,请求的主体包含一个 json 对象,我的服务需要它来正确处理请求。
虽然我知道如何将这些请求路由到适当的控制器,但我只是不知道我应该如何读取请求正文并将其传递给控制器。
Startup.cs
class Startup
{
private readonly IHostingEnvironment _env;
private readonly IConfiguration _config;
private readonly ILoggerFactory _loggerFactory;
public Startup(IHostingEnvironment env, IConfiguration config,
ILoggerFactory loggerFactory)
{
_env = env;
_config = config;
_loggerFactory = loggerFactory;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Classifier}/{action}");
});
}
}
控制器
public class ClassifierController : Controller
{
private Classifier documentClassifier = new Classifier();
public TrainingResponse Training(RequestTrainingData requestDataTrain)
{
return documentClassifier.Train(requestDataTrain);
}
public PredictionResponse Predict(RequestPredictionData requestDataPredict)
{
return documentClassifier.Predict(requestDataPredict);
}
}
如您所见,我希望得到类型为 RequestPredictionData 或 RequestTrainingData 的对象:
RequestPredictionData
public class RequestPredictionData
{
public string Principal { get; set; }
public IEnumerable<PredictionInputDocument> Docs { get; set; }
}
请求训练数据
public class RequestTrainingData
{
public string Principal { get; set; }
public IEnumerable<TrainingDocument> Docs { get; set; }
}
抱歉,文本太长了,感谢所有花时间阅读我的问题的人^^'
它看起来就像您需要一个 Web API。像这样:
请使用WebApi配置:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList"));
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
那么你应该用属性标记你的控制器
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
并将您的方法标记为POST
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult<Pet> Create(Pet pet)
{
pet.Id = _petsInMemoryStore.Any() ?
_petsInMemoryStore.Max(p => p.Id) + 1 : 1;
_petsInMemoryStore.Add(pet);
return CreatedAtAction(nameof(GetById), new { id = pet.Id }, pet);
}
所以,您可以在这里阅读 mo:
https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.0&tabs=visual-studio
https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.0
对不起,伙计们,这似乎是一个新手问题,但我以前从未使用过端点映射,而且似乎无法弄清楚。
所以我写了一个监听请求的服务,请求的主体包含一个 json 对象,我的服务需要它来正确处理请求。 虽然我知道如何将这些请求路由到适当的控制器,但我只是不知道我应该如何读取请求正文并将其传递给控制器。
Startup.cs
class Startup
{
private readonly IHostingEnvironment _env;
private readonly IConfiguration _config;
private readonly ILoggerFactory _loggerFactory;
public Startup(IHostingEnvironment env, IConfiguration config,
ILoggerFactory loggerFactory)
{
_env = env;
_config = config;
_loggerFactory = loggerFactory;
}
public void ConfigureServices(IServiceCollection services)
{
services.AddRouting();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller=Classifier}/{action}");
});
}
}
控制器
public class ClassifierController : Controller
{
private Classifier documentClassifier = new Classifier();
public TrainingResponse Training(RequestTrainingData requestDataTrain)
{
return documentClassifier.Train(requestDataTrain);
}
public PredictionResponse Predict(RequestPredictionData requestDataPredict)
{
return documentClassifier.Predict(requestDataPredict);
}
}
如您所见,我希望得到类型为 RequestPredictionData 或 RequestTrainingData 的对象:
RequestPredictionData
public class RequestPredictionData
{
public string Principal { get; set; }
public IEnumerable<PredictionInputDocument> Docs { get; set; }
}
请求训练数据
public class RequestTrainingData
{
public string Principal { get; set; }
public IEnumerable<TrainingDocument> Docs { get; set; }
}
抱歉,文本太长了,感谢所有花时间阅读我的问题的人^^'
它看起来就像您需要一个 Web API。像这样:
请使用WebApi配置:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddDbContext<TodoContext>(opt =>
opt.UseInMemoryDatabase("TodoList"));
services.AddControllers();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
那么你应该用属性标记你的控制器
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
并将您的方法标记为POST
[HttpPost]
[ProducesResponseType(StatusCodes.Status201Created)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public ActionResult<Pet> Create(Pet pet)
{
pet.Id = _petsInMemoryStore.Any() ?
_petsInMemoryStore.Max(p => p.Id) + 1 : 1;
_petsInMemoryStore.Add(pet);
return CreatedAtAction(nameof(GetById), new { id = pet.Id }, pet);
}
所以,您可以在这里阅读 mo: https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api?view=aspnetcore-3.0&tabs=visual-studio
https://docs.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-3.0