我使用webapi 2创建了一个api,配置如下
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "ControllerAndAction",
routeTemplate: "api/{controller}/{action}"
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.EnableSystemDiagnosticsTracing();
config.Filters.Add(new AuthorizeAPIRequest());
config.Filters.Add(new AddCorsHeader());
config.MessageHandlers.Add(new EncodingDelegateHandler());
}
它在本地工作正常。但是当我把它放在远程服务器上时,所有请求都会返回401未经授权的错误。但是,bin文件和web.config文件完全相同。深入挖掘,我添加了对远程服务器的跟踪,并发现了以下
w3wp.exe Information: 0 : Operation=AuthorizeAPIRequest.OnAuthorizationAsync, Status=401 (Unauthorized)
w3wp.exe Information: 0 : Operation=askTheExpertController.ExecuteAsync, Status=401 (Unauthorized)
w3wp.exe Information: 0 : Operation=EncodingDelegateHandler.SendAsync, Status=401 (Unauthorized)
基本上,请求甚至不允许授权到远程服务器上的授权方法!本地跟踪日志如下所示
w3wp.exe Information: 0 : Operation=AuthorizeAPIRequest.OnAuthorizationAsync
w3wp.exe Information: 0 : Message='Parameter 'values' bound to the value 'LifespeakUserAdmin.Models.LifespeakAssetQueryValues'', Operation=ModelBinderParameterBinding.ExecuteBindingAsync
w3wp.exe Information: 0 : Message='Model state is valid. Values: values=LifespeakUserAdmin.Models.LifespeakAssetQueryValues', Operation=HttpActionBinding.ExecuteBindingAsync
我已经验证了本地和远程服务器上的dll和webconfig文件都是相同的。还有什么可以解释这个?有什么方法可以“强行”吗?允许访问这些方法的应用程序?
更新:我只需更改IIS中的主机名绑定即可实现此功能。主持人正在使用TLD .rocks - 当我将其更改为.com时。它神奇地工作 - 他们都指向同一个网站,所以不确定为什么会出现这种情况