AJAX POST 在 .NET Core 2.1 中使用引用的 Razor Class 库给出 404 或 415
AJAX POST giving 404 or 415 in .NETCore 2.1 with referenced Razor Class Library
我有一个 .NETCore 2.1 网络应用程序和一个单独的 Razor Class 库。
RCL 包含一些我打算在单独的项目中使用的常用分部视图和函数。
我正在尝试为控制器制作一个 AJAX post,如下所示:
using Microsoft.AspNetCore.Mvc;
namespace ThinkkaGlobal
{
[ApiController]
public class LoginController : Controller
{
[HttpPost("thinkka/login")]
public ActionResult DoLogin([FromBody] ThinkkaUsers.Requests.LoginRequest Req)
{
return PartialView("Login", Req);
}
}
}
注意属性路由...这不一定是我想要的,但我已经花了 小时 现在试图让它工作,我已经尝试了很多很多不同的路由选项。我的 Startup.cs
文件中也有 app.UseMvcWithDefaultRoute();
。
最终,我想要的是 AJAX post,它将 return 部分视图...我想使用 jquery-unobtrusive-ajax
来实现,并且这就是我开始的方式,但后来我开始直接使用 jQuery AJAX
这样我就可以把它弄得更乱了。
所以,非常基础 AJAX...
$.ajax({
url: "thinkka/login",
type: 'post',
contentType: "application/json", // (application/x-www-form-urlencoded; charset=UTF-8)
dataType: 'json',
success: function (data) {
console.log(data);
},
data: { email: "jamie@jamiehartnoll.co.uk" }
});
快速说明一下,POSTed 对象是一个简单的对象,如下所示:
class LoginRequest
{
public string email { get; set; }
public string password { get; set; }
public bool remember { get; set; }
public int location { get; set; }
public string userpass { get; set; }
}
当我 POST 使用 contentType application/x-www-form-urlencoded; charset=UTF-8
我得到 Error 415 - Unsupported Media Type
当我 POST 使用 contentType application.json
我得到 Error 404 - Not Found
几个小时以来,我一直收到 404,但我认为当时我确实使用了错误的路由。我使用 thinkka/login/DoLogin
作为 URL,即包括被调用的方法名称,但是路由属性覆盖了它,所以在所有的时间里我都在浪费时间让它工作,我想我只是使用错误 URL!
但是......现在......我至少可以得到一个不同的错误代码这一事实是否表明 URL 是正确的?
但我不知道为什么我仍然得到我使用 application/json
的 404,尽管实际上 application/x-www-form-urlencoded; charset=UTF-8
将是正确的 contentType...。不是吗... .
我不知道...已经晚了,我已经做了好几个小时了,这已经毫无意义了!
一如既往,我们将不胜感激!
嗯...我分两个阶段解决了问题...
首先为了正确 return 一个 Partial
这是我最终想要的,我改变了控制器 class 如下
using Microsoft.AspNetCore.Mvc;
namespace ThinkkaGlobal
{
[ApiController]
public class LoginController : Controller
{
[Route("thinkka/login")]
[HttpPost]
public PartialViewResult DoLogin([FromBody()] ThinkkaUsers.Requests.LoginRequest Req)
{
return PartialView("Login", Req);
}
}
}
其次,我将 AJAX 更改为:
$.ajax({
url: "thinkka/login",
type: 'post',
contentType: "application/json",
dataType: 'json',
success: function (data) {
alert('Success ' + data);
},
data: JSON.stringify({ email: "Email Address" })
});
没有 Stringify-ing
JSON 我更新后的控制器出现 400
错误。
对 startup.cs
没有任何更改,除了 app.UseMvcWithDefaultRoute();
之外仍然不包含显式路由声明 - 如前所述,此处需要属性路由。
在我的 AJAX 中使用 application/x-www-form-urlencoded; charset=UTF-8
我得到 415
现在有意义了。
所以还是没看懂
为什么我必须 stringify
我的 JSON Post 数据 - 或者更具体地说,我需要进行哪些更改才能不需要到...
为什么我以前的 Controller 会得到 404
,除了它声明的是 ActionResult
类型之外,它在各个方面都是一样的……事实上,对于我的目的来说无论如何都是错误的,但为了学习目的....为什么?
我有一个 .NETCore 2.1 网络应用程序和一个单独的 Razor Class 库。
RCL 包含一些我打算在单独的项目中使用的常用分部视图和函数。
我正在尝试为控制器制作一个 AJAX post,如下所示:
using Microsoft.AspNetCore.Mvc;
namespace ThinkkaGlobal
{
[ApiController]
public class LoginController : Controller
{
[HttpPost("thinkka/login")]
public ActionResult DoLogin([FromBody] ThinkkaUsers.Requests.LoginRequest Req)
{
return PartialView("Login", Req);
}
}
}
注意属性路由...这不一定是我想要的,但我已经花了 小时 现在试图让它工作,我已经尝试了很多很多不同的路由选项。我的 Startup.cs
文件中也有 app.UseMvcWithDefaultRoute();
。
最终,我想要的是 AJAX post,它将 return 部分视图...我想使用 jquery-unobtrusive-ajax
来实现,并且这就是我开始的方式,但后来我开始直接使用 jQuery AJAX
这样我就可以把它弄得更乱了。
所以,非常基础 AJAX...
$.ajax({
url: "thinkka/login",
type: 'post',
contentType: "application/json", // (application/x-www-form-urlencoded; charset=UTF-8)
dataType: 'json',
success: function (data) {
console.log(data);
},
data: { email: "jamie@jamiehartnoll.co.uk" }
});
快速说明一下,POSTed 对象是一个简单的对象,如下所示:
class LoginRequest
{
public string email { get; set; }
public string password { get; set; }
public bool remember { get; set; }
public int location { get; set; }
public string userpass { get; set; }
}
当我 POST 使用 contentType application/x-www-form-urlencoded; charset=UTF-8
我得到 Error 415 - Unsupported Media Type
当我 POST 使用 contentType application.json
我得到 Error 404 - Not Found
几个小时以来,我一直收到 404,但我认为当时我确实使用了错误的路由。我使用 thinkka/login/DoLogin
作为 URL,即包括被调用的方法名称,但是路由属性覆盖了它,所以在所有的时间里我都在浪费时间让它工作,我想我只是使用错误 URL!
但是......现在......我至少可以得到一个不同的错误代码这一事实是否表明 URL 是正确的?
但我不知道为什么我仍然得到我使用 application/json
的 404,尽管实际上 application/x-www-form-urlencoded; charset=UTF-8
将是正确的 contentType...。不是吗... .
我不知道...已经晚了,我已经做了好几个小时了,这已经毫无意义了!
一如既往,我们将不胜感激!
嗯...我分两个阶段解决了问题...
首先为了正确 return 一个 Partial
这是我最终想要的,我改变了控制器 class 如下
using Microsoft.AspNetCore.Mvc;
namespace ThinkkaGlobal
{
[ApiController]
public class LoginController : Controller
{
[Route("thinkka/login")]
[HttpPost]
public PartialViewResult DoLogin([FromBody()] ThinkkaUsers.Requests.LoginRequest Req)
{
return PartialView("Login", Req);
}
}
}
其次,我将 AJAX 更改为:
$.ajax({
url: "thinkka/login",
type: 'post',
contentType: "application/json",
dataType: 'json',
success: function (data) {
alert('Success ' + data);
},
data: JSON.stringify({ email: "Email Address" })
});
没有 Stringify-ing
JSON 我更新后的控制器出现 400
错误。
对 startup.cs
没有任何更改,除了 app.UseMvcWithDefaultRoute();
之外仍然不包含显式路由声明 - 如前所述,此处需要属性路由。
在我的 AJAX 中使用 application/x-www-form-urlencoded; charset=UTF-8
我得到 415
现在有意义了。
所以还是没看懂
为什么我必须
stringify
我的 JSON Post 数据 - 或者更具体地说,我需要进行哪些更改才能不需要到...为什么我以前的 Controller 会得到
404
,除了它声明的是ActionResult
类型之外,它在各个方面都是一样的……事实上,对于我的目的来说无论如何都是错误的,但为了学习目的....为什么?