сразу отвечу на вопрос, что Required у него стоит для Swagger'a и убирать его не хотелось бы
services.Configure<ApiBehaviorOptions>(options =>
{
options.SuppressModelStateInvalidFilter = true;
});
var conn = new SqliteConnection("DataSource=:memory:");
var options = new DbContextOptionsBuilder<ApplicationContext>()
.UseSqlite(conn)
.Options;
using var dbContext = new ApplicationContext(options);
dbContext.Products.Add(new Product { /*...*/});
dbContext.SaveChanges();
var controller = new CartController(dbContext);
// ...
Какая ОС должна быть установлена на сервере
предоставить доступ к сайту не абсолютно всем пользователям в сети Интернет, а только филиалам предприятия
И как в данном случае приобретается доменное имя для поиска сайта, ведь в данном случае у предприятия собственный сервер и он не приобретает хостинг.
var storage = { // Зачем вообще такая табличная форма нужна?
Mname: [
{ mname: "vk" },
{ mname: "tg" },
{ mname: "inst" },
{ mname: "facebook" }
],
Link: [
{ link: val.vk },
{ link: val.tg },
{ link: val.inst },
{ link: val.facebook }
]
}
var storageForSubmit = { // Почему один и тот же объект постоянно перезаписывается?
Mname: "",
Link: ""
}
for (var i = 0; i < storage.Link.length; i++) {
storageForSubmit.Mname = storage.Mname[i].mname // А не проще было бы for-of сделать?
storageForSubmit.Link = storage.Link[i].link
form.append("Media", JSON.stringify(storageForSubmit))
SubmitDataLinks(storageForSubmit) // Вот сюда в итоге один и тот же объект будет отправляться
}
function SubmitDataLinks(storageForSubmit) { // storageForSubmit даже не используется
$(document).ready(function(){// зачем оно в .ready обёрнуто???
$.ajax({
type: "POST",
url: "@Url.Action("SaveFile")",
data: form, // Поведение при использовании FormData недокументировано
processData: false,
contentType: false, // Поведение при contentType=false недокументировано
success: function () {
console.log("Успешно!")
},
error: function () {
console.log("Ошибка!")
}
})
})
}
[HttpPost]
public void SaveFile([FromBody] UploadMedia data)
{
Console.WriteLine(data);
}
public record UploadMedia(string MediaName, string MediaLink);
document.addEventListener('DOMContentLoaded', () => {
const saveFileEndpoint = '@Url.Action("SaveFile")';
const readLinks = () => ({
"vk": document.querySelector("input.link-vk").value,
"tg": document.querySelector("input.link-tg").value,
"inst": document.querySelector("input.link-inst").value,
"facebook": document.querySelector("input.link-facebook").value,
})
const submitLinks = async (links) => {
for (const mediaWithLink of links) {
await fetch(saveFileEndpoint, {
method: "POST",
body: JSON.stringify(mediaWithLink),
headers: {
"Content-Type": "application/json"
}
})
}
}
const onSaveLinks = async () => {
const allLinks = readLinks();
const linksList = Object.keys(allLinks).map(key => ({ "MediaName": key, "MediaLink": allLinks[key] }));
try {
await submitLinks(linksList);
console.log("Ссылки сохранены");
} catch (e) {
console.error(`Произошла ошибка при отправке ссылок: ${e.message}`);
}
};
document.querySelector("button.save-links").addEventListener("click", onSaveLinks);
});