CEBE dev Ответов: 2

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-адрес, { имя: "Джон" })

2 Ответов

Рейтинг:
1

SRV75

Привет,
Вы получили решение? если да, пожалуйста, дайте мне знать, как вы это сделали? Я застрял с той же проблемой.

Спасибо,
SR.


Richard Deeming

Если вы хотите задать вопрос, то задавать вопрос[^].

НЕ разместите свой вопрос как "решение" чужого вопроса!

Рейтинг:
0