У меня есть собственный ASP. net сервер Web API 2 с Entity Framework, который расположен на Azure. Он связывает базу данных с Azure и создает контроллеры для запросов GET и POST. DTOs также были созданы. Есть также приложение на Unity, которое подключается к серверу и отправляет ему запросы в виде журналов о различных условиях. В автономной версии все работает нормально, но если вы делаете это в версии WebGL и выбрасываете ее на хостинг, это дает (500 внутренняя ошибка сервера). И я не знаю, в чем может быть проблема
GET на сервере:
[ResponseType(typeof(Rooms))]
public IHttpActionResult GetRoom(string id)
{
Rooms room = db.Rooms.Where(r => r.RoomName == id).FirstOrDefault();
var roomdto = new RoomDto(room);
if (roomdto == null)
{
return NotFound();
}
return Ok(roomdto);
}
Пример DTO:
public class RoomDto
{
public int IDRoom { get; set; }
public string RoomName { get; set; }
public RoomDto(Rooms entity)
{
IDRoom = entity.IDRoom;
RoomName = entity.RoomName;
}
}
Моя БД:
public partial class LogsDBModel : DbContext
{
public LogsDBModel()
: base("name=DBModel")
{
}
public virtual DbSet<Ball> Ball { get; set; }
public virtual DbSet<DirectionVector> DirectionVector { get; set; }
public virtual DbSet<GameTime> GameTime { get; set; }
public virtual DbSet<Impact> Impact { get; set; }
public virtual DbSet<Players> Players { get; set; }
public virtual DbSet<Rooms> Rooms { get; set; }
public virtual DbSet<database_firewall_rules> database_firewall_rules { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<GameTime>()
.HasMany(e => e.Ball)
.WithOptional(e => e.GameTime)
.WillCascadeOnDelete();
modelBuilder.Entity<Players>()
.Property(e => e.PlayerName)
.IsFixedLength();
modelBuilder.Entity<Rooms>()
.Property(e => e.RoomName)
.IsFixedLength();
modelBuilder.Entity<Rooms>()
.HasMany(e => e.GameTime)
.WithOptional(e => e.Rooms)
.WillCascadeOnDelete();
modelBuilder.Entity<Rooms>()
.HasMany(e => e.Players1)
.WithOptional(e => e.Rooms)
.WillCascadeOnDelete();
modelBuilder.Entity<database_firewall_rules>()
.Property(e => e.start_ip_address)
.IsUnicode(false);
modelBuilder.Entity<database_firewall_rules>()
.Property(e => e.end_ip_address)
.IsUnicode(false);
}
}
Получение от Unity:
public IEnumerator GetRequest(string uri)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(Host + uri))
{
yield return webRequest.SendWebRequest();
response = webRequest.downloadHandler.text;
}
}
public IEnumerator GetID(string entity, string identify)
{
yield return StartCoroutine(GetRequest(entity + identify));
switch(entity)
{
case "Rooms/":
Rooms room = Rooms.CreateFromJSON(response);
ID = room.IDRoom;
break;
case "Players/":
Players player = Players.CreateFromJSON(response);
ID = player.IDPlayer;
break;
case "DirectionVectors/":
DirectionVectors dv = DirectionVectors.CreateFromJSON(response);
ID = dv.IDDirectionVector;
break;
case "GameTimes/":
GameTimes gt = GameTimes.CreateFromJSON(response);
ID = gt.IDGameTime;
break;
}
}
Json:
[System.Serializable]
public class Rooms
{
public int IDRoom;
[System.NonSerialized]
public string RoomName;
public static Rooms CreateFromJSON(string jsonString)
{
return JsonUtility.FromJson<Rooms>(jsonString);
}
}
{"Message": "Произошла ошибка.", "ExceptionMessage": "Указанный источник политики 'https://newlogsserverapi20200402121056.azurewebsites.net/' недопустим. Он не должен содержать путь, запрос или фрагмент.", "ExceptionType": "System.InvalidOperationException", "StackTrace": "at System .Web.Http.Cors.EnableCorsAttribute.ValidateOrigins (происхождение IList`1) \ r \ n в System.Web.Http.Cors.EnableCorsAttribute.GetCorsPolicyAsyn c (системный запрос HttpRequestMessage \ запрос отмены \ Token \ noken) .Http.Cors.CorsMessageHandler.d__8.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (задача задачи ) \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача) \ r \ n в Системе m.Web.Http.Cors.CorsMessageHandler.d__5.MoveNext () \ r \ n --- Конец трассировки стека из предыдущего расположения, где было сгенерировано исключение --- \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess (Задача задачи) \ r \ n в System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (Задача задачи) \ r \ n в System.Web.Http.Cors.CorsMessageHandler.d__4.MoveNext () "}