У меня есть приложение MVC. NET, которое использует комбинацию Razor и Ajax для выполнения различных вызовов Get и Post в моих представлениях. Я всегда пытался переместить Javascript в свои собственные файлы для лучшей поддержки и облегчения отладки, но методы, которые я использую для AntiForgery и некоторых других процессов, требуют сильной связи кода Razor и Ajax. Это затрудняет извлечение Javascript из файла .cs html, как обычно.
Вот пример:
....
@section Scripts
{
<!--Razor Functions-->
@functions{
public string GetAntiForgeryTokens()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
<script>
// Javascript Functions
function approveTracker(vm)
{
vm.save(vm).done(
() =>
{
let tracker = ko.toJS(vm.tracker);
$("#testModal").modal("hide");
messageModal.setStatusAndShow("Approving", "<div class=\"spinner-border text-success\" role=\"status\"></div> Please wait...");
$.ajax(
{
url: `/api/Tracker/Approve/${tracker.Id}`,
method: "POST",
headers: {
'RequestVerificationToken': '@GetAntiForgeryTokens()'
}
})
.done(() =>
{
document.location = `/Tracker/Edit/${tracker.TrackerId}`;
})
.fail(handleAjaxFailure);
});
}
</script>
}
Важным компонентом здесь является следующая часть вызова Ajax:
headers: {
'RequestVerificationToken': '@GetAntiForgeryTokens()'
}
Можно ли в любом случае переместить скрипт в его собственный файл и при этом использовать функцию Razor для получения токенов ie:
@section Scripts
{
<!--Razor Functions-->
@functions{
public string GetAntiForgeryTokens()
{
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
return cookieToken + ":" + formToken;
}
}
<script type="text/javascript" src="~/Scripts/Tracker/tracker-edit.js"></script>
}
Или я могу найти единственный способ найти чистый токен HTML / Javascript для доступа к токенам?