Я возился с сайтом на портале для бизнеса, ничего особенного, чтобы просто поиграть больше всего на свете, и я сделал несколько таких, где они используют ASP. NET MVC для довольно упрощения c API и доступ к базе данных (последняя попытка, которая работала нормально, была секцией комментариев в блоге, которую я так и не закончил, но она работала нормально).
Я скопировал и вставил огромное количество из этой последней проект и он отлично работает на локальном хосте, но по какой-то причине он выдает ошибку 404, загруженную в Azure. Это не междоменный домен, хотя я играл с CORS после нескольких запросов, которые я нашел здесь вчера. Когда я медленно вытащил код из сценария, я обнаружил, что он не работает вокруг SQL соединения (без него он не генерировал 404, но потребовалось около десятка публикаций с медленным удалением кода, чтобы добраться до этого).
Я честно потянул за это свои волосы. Я перепробовал почти все: я попытался поместить код на страницу Razor и загрузить его; Я пробовал другие версии MVC; Я пытался использовать шаблонные контроллеры API; Я пробовал диапазон Azure экземпляров сервера как Windows на Core 3, так и Linux на Core 3.1. Сегодняшняя попытка состояла в том, чтобы изучить основы 1026 * Entity Framework и кодировать ее, в случае, если SQLConnection каким-то образом обесценится в этой версии на Azure. Я посмотрел на диагностику на Azure, но хотя я вижу 404 запросов, которые я делаю, я не вижу подробностей о них сбоев в них, как если бы они были обычными 404 запросами, но я знаю, что контроллеры работают, потому что я не появляется ошибка 404, если я просто щелкаю запрос в Firefox Developer Tools на вкладке Network, и он нормально загружается.
Более новый контроллер входа Entity Framework (который даже не работает полностью, но делает немного, прежде чем я попытался загрузить его и обнаружил ту же ошибку 404 по запросу):
public partial class ApiController : ControllerBase
{
[HttpGet("/api/login/")]
public String Login()
{
Boolean Authorised = false;
String Token = "";
String UserId = "";
String Username = "";
StringValues AuthorisationHeaderValues = "";
Request.Headers.TryGetValue("Authorisation", out AuthorisationHeaderValues);
String AuthorisationUser = Convert.ToString(Request.Query["u"]);
String AuthorisationPassword = AuthorisationHeaderValues.FirstOrDefault();
if (!String.IsNullOrEmpty(AuthorisationUser) && !String.IsNullOrEmpty(AuthorisationPassword))
{
AuthorisationUser = Encryption.AtoB(AuthorisationUser);
if (_Context.Users.Any(o => o.Username == AuthorisationUser))
{
var Query = _Context.Users
.Where(s => s.Username == AuthorisationUser)
.FirstOrDefault<User>();
UserId = Convert.ToString(Query.UserId);
}
}
String Response = "";
if (Authorised)
{
Response = JsonConvert.SerializeObject(new
{
auth = @"success",
token = Token,
userid = UserId,
username = Username
});
}
else
{
Response = JsonConvert.SerializeObject(new
{
auth = @"fail"
});
}
return Response;
}
}
Исходный контроллер входа SqlConnection был:
public class ApiLogin1Controller : Controller
{
[HttpGet("/api/login/")]
public string Get()
{
Boolean Authorised = false;
String Token = "";
String UserId = "";
String Username = "";
StringValues AuthorisationHeaderValues = "";
Request.Headers.TryGetValue("Authorisation", out AuthorisationHeaderValues);
String AuthorisationUser = Convert.ToString(Request.Query["u"]);
String AuthorisationPassword = AuthorisationHeaderValues.FirstOrDefault();
if (!String.IsNullOrEmpty(AuthorisationUser) && !String.IsNullOrEmpty(AuthorisationPassword))
{
using (SqlConnection Connection = new SqlConnection("Server=aqht.database.windows.net;Database=aqht;User Id=aquaheat;Password=A38625e5dD729#;"))
{
SqlCommand Command = new SqlCommand("aqsp_user_login", Connection);
Command.Parameters.AddWithValue("@username", Encryption.AtoB(AuthorisationUser));
Command.Parameters.AddWithValue("@password", Encryption.AtoB(AuthorisationPassword.Remove(0, 6)));
Command.Parameters.Add("@output", SqlDbType.NVarChar);
Command.Parameters["@output"].Size = 128;
Command.Parameters["@output"].Direction = ParameterDirection.Output;
Command.Parameters.Add("@name", SqlDbType.NVarChar);
Command.Parameters["@name"].Size = 128;
Command.Parameters["@name"].Direction = ParameterDirection.Output;
Command.Parameters.Add("@token", SqlDbType.UniqueIdentifier);
Command.Parameters["@token"].Direction = ParameterDirection.Output;
Connection.Open();
Command.CommandType = CommandType.StoredProcedure;
Int32 i = Command.ExecuteNonQuery();
UserId = Convert.ToString(Command.Parameters["@output"].Value);
Username = Convert.ToString(Command.Parameters["@name"].Value);
if (UserId.Length > 3)
{
Token = Convert.ToString(Command.Parameters["@token"].Value);
Authorised = true;
}
Connection.Close();
}
}
String Response = "";
if (Authorised)
{
Response = JsonConvert.SerializeObject(new {
auth = @"success",
token = Token,
userid = UserId,
username = Username
});
}
else
{
Response = JsonConvert.SerializeObject(new {
auth = @"fail"
});
}
return Response;
}
}
Запрос JQuery это:
$.ajax({
url: "http://aqht.net/api/login/?u=" + emailtosend,
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorisation", "Dblrs " + passwordtosend);
}
}).done(function (data) {
aq_login_process(jQuery.parseJSON(data));
}).fail(function (data) {
aq_login_fail();
});
Я в лучшем случае всего лишь программист-любитель, это веселее, чем создавать или достигать чего-либо, но, честно говоря, это действительно беспокоит меня сейчас, я не думаю, что я глуп, но Я также не знаю, что я мог сделать неправильно - за пару лет я выполнил множество таких действий точно так же, и это никогда не подводило так.