我已经为此搜索了所有可能的论坛,但不知何故没有让我WebGL
消费我的ASP.NET 4.5 REST API's
.
据我所知,这可能与WebGL
要求有关CORS
,但即使启用此功能,我也无法让游戏与我的API's
因此,要么是我在其中实现全局CORS
设置的方式有问题,ASP.NET
要么是其他一些问题正在破坏。需要明确的是,这些 APIAndroid/iOS/Windows builds
在编辑器中甚至在编辑器中运行得非常好。
到目前为止我所做的:
Microsoft CORS build
按照微软相关文档的建议 安装,然后将以下代码添加到WebAPIConfig
类中Visual Studio
:
public static void Register(HttpConfiguration config)
{
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
// Web API routes
config.MapHttpAttributeRoutes();
////new code
config.EnableCors(new EnableCorsAttribute("*", "*", "*"));
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
这也在我的 web.config 中:
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
我需要这些全局设置,因此我使用"*"
文档中指示的包含所有域、方法类型和标头,因为我对我的 API 使用 ASP.NET 令牌身份验证。
这是在 Unity 项目中获取令牌的代码片段(为了清楚起见,这适用于其他平台,只会在 a 中引发错误WebGL build
)
public IEnumerator login()
{
string url = API.ROUTEPATH + API.TOKEN;
WWWForm form = new WWWForm();
form.AddField("grant_type", "password");
form.AddField("username", API.APIUSERNAME);
form.AddField("password", API.APIPASSWORD);
UnityWebRequest uwr = UnityWebRequest.Post(url, form);
uwr.SetRequestHeader("Content-Type", "application/json");
yield return uwr.SendWebRequest();
try
{
if (uwr.isNetworkError)
{
Debug.Log(uwr.error);
}
else
{
APIAuthToken returnauth = JsonUtility.FromJson<APIAuthToken>(uwr.downloadHandler.text);
if (!string.IsNullOrEmpty(returnauth.access_token))
{
API.hasAuth = true;
API.token = returnauth.access_token;
Debug.Log(returnauth.access_token);
}
}
}
catch
{
}
}
uwr.error
产生以下非常有用的错误:Unknown Error
所以我什至不确定它是否CORS
相关,这只是我根据我所做的研究得出的最佳猜测,但即使有多种不同的实现,我仍然会遇到相同的错误。因此,如果API's
我的 Unity 代码和我的代码没有问题,请忽略ASP.NET
代码片段。