Angular2 http post не передает объект json в действие контроллера MVC 6
1. действие контроллера
[HttpPost] public IActionResult addNewUser(string name) //tested with [FromBody] { return Json(name); }
2.angular2 HTTP-запрос POST
--UserComponent.ts this.userService.AddUser(name).subscribe( res => { this.toggle('list'); } ); --UserService.ts AddUser(name: string) { return this.ExecutePost('addNewUser', name).map((newUser: string) => { return newUser }); } --BaseService.ts protected ExecutePost(action: string, name: string) { let body = JSON.stringify({ name: name }); let headers = new Headers({ 'Content-Type': 'application/json;charset=utf-8' }); return this.http.post(this._baseUrl + action, body, { headers: headers }) .map(res => { return res.json(); }).catch(this.handleError); }
Я могу получить доступ к тому же действию с помощью jQuery ajax, и оно работает нормально.
$(document).ready(function () { $.ajax({ method: "POST", url: "/Home/addNewUser", data: { 'name': 'cebeDev' } }) });
Или, может быть, в файле startup.cs чего-то не хватает?
Startup. cs
public class Startup { public Startup(IHostingEnvironment env) { // Set up configuration sources. var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json") .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) .AddEnvironmentVariables(); if (env.IsDevelopment()) { // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately. builder.AddApplicationInsightsSettings(developerMode: true); } Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; set; } // This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { // Add framework services. services.AddApplicationInsightsTelemetry(Configuration); services.AddMvc(); } // 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(Configuration.GetSection("Logging")); loggerFactory.AddDebug(); app.UseApplicationInsightsRequestTelemetry(); if (env.IsDevelopment()) { app.UseBrowserLink(); app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Home/Error"); } app.UseIISPlatformHandler(); app.UseApplicationInsightsExceptionTelemetry(); app.UseStaticFiles(); app.UseMvc(routes => { routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); } // Entry point for the application. public static void Main(string[] args) => WebApplication.Run<Startup>(args); }
Пожалуйста помочь.
Что я уже пробовал:
Я работаю над приложением angular 2 с использованием asp.net MVC6. Метод Angular2 Http post вызывает действие контроллера и работает правильно, когда нет параметра/свойств, но когда я добавляю параметр к действию контроллера, ожидаемое сопоставление JSON не происходит при попытке вызвать действие со значениями параметров. Отладка действия показывает нулевое значение параметра.
John C Rayan
просто передайте параметры без заголовков, а затем попробуйте с заголовками
$протоколу HTTP.пост(URL-адрес, { имя: "Джон" })