我有自己的带有Entity Framework的ASP.net Web API 2服务器,该服务器托管在Azure上。它从Azure连接数据库,并为GET和POST请求创建控制器。还创建了DTO。 Unity上还有一个应用程序,该应用程序连接到服务器,并以各种情况的日志形式向他发送请求。在独立版本中,一切正常,但是,如果在WebGL版本中执行此操作,然后将其扔到主机上,则会出现错误(500内部服务器错误)。而且我不知道可能是什么问题
在服务器上获取:
[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.Web.Http.Cors.EnableCorsAttribute.ValidateOrigins(IList`1起源)\ r \ n位于System.Web.Http.Cors.EnableCorsAttribute.GetCorsPolicyAsync(HttpRequestMessage请求,CancellationToken为“ System.InvalidOperationException”,“ StackTrace”:“ cancelToken)\ r \ n在System.Web.Http.Cors.CorsMessageHandler.d__8.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__5.MoveNext() r \ n--从之前抛出异常的位置开始的堆栈结束跟踪--- \ r \ n位于System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务任务)\ r \ na t System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务任务)\ r \ n位于System.Web.Http.Cors.CorsMessageHandler.d__4.MoveNext()“}
指定CROS时错误在错误的地址中
var cors = new EnableCorsAttribute("https://newlogsserverapi20200402121056.azurewebsites.net", "*", "*");
config.EnableCors(cors);