Я совершенно новичок в этом и пытаюсь научиться выполнять вызовы API из JS с использованием Ajax.
Я запустил веб-приложение ASP.NET Core, используя MVC.
Я создал HTML-форму в Index.cshtml с кнопкой отправки (я хотел бы использовать некоторые функции бритвы в будущем, когда освою это!)
<form id="login_form">
<input id="submit_button" type="submit" value="Submit" onclick="GeneralPost()"/>
</form>
Что я заметил, так это то, что первый раз, когда я нажимаю кнопку отправки после запуска режима отладки из Visual Studio (сервер работает), возвращает ошибку. Но более поздние нажатия кнопки возвращают успех!
Вот мой Ajax, который я поместил в папку site.js
function GeneralPost() {
var data = "Data To Pass";
$.ajax({
type: "POST",
url: '/Home/Login',
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (response) {
alert(response.name);
},
error: function () {
alert("Error");
}
});
}
А вот и мой контроллер
public class HomeController : Controller
{
// What I wrote
[HttpPost()]
public User Login([FromBody]string data)
{
User user = new User(); ;
user.name = $"User {data}";
user.id = "1";
return user;
}
// the rest is already there from the MVC example by visual studio (deleted some code to make it shorter)
public IActionResult Index()
{
return View();
}
public IActionResult About()
{
ViewData["Message"] = "Your application description page.";
return View();
}
Я также заметил, что когда я нажимаю кнопку отправки на странице бритвы, выполняется действие Index(). Я не уверен, почему действие Index выполняется все время, когда я запросил действие Login! это что-то с MVC? Связано ли это поведение с моим первым запросом на прерывание?
Я думаю, что также неплохо включить мою конфигурацию из Startup.cs, так как я не уверен, что понимаю все это, и я пытаюсь предоставить как можно больше полезной информации.
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
// app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Подводя итог:
1- В первый раз, когда я нажимаю кнопку отправки после запуска сеанса отладки из Visual Studio, я получаю сообщение об ошибке, и Fiddler показывает мне, что состояние сеанса прервано.
2- Во второй раз, когда я нажимаю кнопку, даже если она находится на новой вкладке или в новом браузере, я получаю ожидаемые результаты без ошибок.
Любые идеи? я ценю вашу помощь