سلام دوستان من برای لیست علاقه به این صورت کد زدم ولی تابع Ajax اصلا نمیتونه اطلاعات رو پست کنه و این خطا رو میده هرچیم راه حل تو نت بود رفتم جواب نداد لطفا کسی هت کمک کنه ؟
اصلا اجازه Post شدن اطلاعات به کنترلر رو نمیده بریگ پوینت هم میزارم اصلا به کنترلر نمیره
Failed to load resource: the server responded with a status of 400 ()
public JsonResult AddInterested([FromBody] ProductFavorites model)
{
var result = "";
if (_productService.IsExistInFavorites(User.Identity?.Name,model.ProductId))
{
result = "این محصول در لیست علاقه مندی ها وجود دارد";
}
else
{
result = _productService.AddProductToFavorites(User.Identity?.Name, model.ProductId) ? "موفقیت" : "ثبت با خطا مواجه شد";
}
return Json(result);
}
$('.btnInterested').click(function () {
const thisId = window.$(this).attr("ThisId");
var thisName = window.$(this).attr("ThisName");
alert("Id:"+thisId);
const model = { 'ProductId': thisId };
var action = { url: "@Url.Action("AddInterested","Product")"};
var dataJson = JSON.stringify(model);
$.ajax({
type: "POST",
url: action.url,
contentType: "application/json;charset=utf-8",
data: dataJson
@*'@tokenSet.HeaderName' : '@tokenSet.RequestToken'*@
}).done(function(result) {
if (result === "موفقیت") {
window.Swal.fire(
"به لیست علاقه مندی حذف شد." ,
'',
'success'
);
setInterval('location.reload(true);', 2000);
location.reload(true);
} else {
console.log(result);
}
});
});
سلام ، حق با شماست دستور post یکم چم و خمش زیادتره مخصوصا اگه بخواهیم برای امنیت بیشتر از jwt استفاده کنیم و یا عکس هم بفرستیم ، با کد زیر تمامی موارد برای من جواب دادند ،امیدوارم برای شما هم بدهد :
var model = new FormData();
model.append("Name", $("#name").val());
model.append("Family", $("#family").val());
model.append("Mobile", $("#mobile").val());
model.append("Image", $("#image")[0].files[0]);
$.ajax({
url: "/Api/People",
type: "POST",
headers: {
'Authorization': 'Bearer @Model.ToString()'
},
dataType: "json",
data: model,
processData: false,
contentType: false,
complete: function(data) {
...
که البته بخش headers اختیاری هست و برای امنیت بیشتر هست و jwt برای آن باید فعال باشد توضیحات بیشتر را استاد در آموزش web api در مورد jwt گفته،
حال روش اصولی آن هست که یک کنترلر خالی api به کنترلرها اضافه کنیم و متد زیر را در آن قرار دهیم (نیازی به آموزش دیدن web api ندارید) ،
[HttpPost]
public async Task<IActionResult> Post()
{
var data = HttpContext.Request.Form;
var dic = Request.Form.ToDictionary(x => x.Key, x =>
x.Value.ToString());
Customer customer = new Customer();
foreach (var kvp in data.Keys)
{
PropertyInfo pi =
customer.GetType()
.GetProperty(kvp, BindingFlags.Public |
BindingFlags.Instance);
if (pi != null)
{
pi.SetValue(customer, dic[kvp], null);
}
}
if (data.Files.Count > 0)
{
IFormFile img = data.Files[0];
customer.ImageName = img.FileName;
string savePath = Path.Combine(Directory.GetCurrentDirectory(),
"wwwroot/images", customer.ImageName);
using (var fileStream = new FileStream(savePath, FileMode.Create))
{
img.CopyTo(fileStream);
}
البته اگر خط
var data = HttpContext.Request.Form;
خطا داد آن را اسینک کنید :
var data = await HttpContext.Request.ReadFormAsync
ضمنا بالای کنترلر هم در بالای تعریف کلاس این باید باشد :
[Route("api/[controller]")]
[ApiController]