web api POST returns 500 错误与 AllowAnonymous 请求
web api POST returns 500 error with AllowAnonymous Requests
我在本地服务器上设置了一个 DNN 9.2 网站。我使用 HttpPOST 将 JSON 发送到 web.api。这是上周的工作,现在在我尝试从 Angular 4.1 升级到 4.3.
时停止工作
当我尝试从我的应用程序或 post 人工调用访问 api 端点时,我收到 500 错误并且没有消息。
这是我的控制器代码:
[HttpPost]
[ActionName("postPost")]
[AllowAnonymous]
public ApiResult UpsertPost([FromBody]Post post)
{
try
{
DO STUFF HERE
}
catch (System.Exception ex)
{
CATCH ERROR
}
}
这里有趣的是,这是有效的,我所做的只是更改为使用 Angular 4.3 中的新 httpClient。我知道 api 端点正在接收请求。
我尝试了什么:
- 我试图通过使用 post 人工调用使 angular 脱离循环。但是,我也无法使用我设置为测试的 postman 调用,我得到了同样的错误。
- 我尝试将安全属性从 [AllowAnonymous] 更改为 ** 内置安全属性的 DNN:[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Anonymous)]** 但是我收到以下错误而不是 500 错误:
Authorization has been denied for this request.
- 如果我将安全属性更改为 [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)]
,也会出现与上述相同的错误
我确定我的 web.config 文件支持 POST 操作:
添加名称="ExtensionlessUrl-Integrated-4.0" 路径="*。" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"
我知道 api 端点被命中,因为如果我使用 GET 而不是 POST 我可以命中 web.pai 代码中的所有断点。以及给定的 "Authorization has been denied for this request" 是由 api 服务提供的。
问题
谁能帮我弄清楚为什么我的 DNN api 和 post 不接受请求?
好吧,难怪这是我的错。我已将 http 请求的授权过程移至新的 httpClient 拦截器。我在创建格式不正确的请求的拦截器函数中遇到错误。修复拦截器后,API 请求现在可以正常工作。
希望这可能对某人有所帮助
我知道你自己得到了答案,但这些链接可能有用:
您可以在此处找到 "scafolding angular project":DNN-Angular-6-7-CLI
以及将项目部署到哪里的 DNN 模块:SPA DNN9:DNN-9.x-SPA-and-Angular-6-7
所有 DNN 的 ASCX:DNN-7.x-8.x-9.x-and-Angular-6-7
全部适用于 dnn webapi 和安全。
我在我的客户中使用了这些项目。
马特奥
我在本地服务器上设置了一个 DNN 9.2 网站。我使用 HttpPOST 将 JSON 发送到 web.api。这是上周的工作,现在在我尝试从 Angular 4.1 升级到 4.3.
时停止工作当我尝试从我的应用程序或 post 人工调用访问 api 端点时,我收到 500 错误并且没有消息。
这是我的控制器代码:
[HttpPost]
[ActionName("postPost")]
[AllowAnonymous]
public ApiResult UpsertPost([FromBody]Post post)
{
try
{
DO STUFF HERE
}
catch (System.Exception ex)
{
CATCH ERROR
}
}
这里有趣的是,这是有效的,我所做的只是更改为使用 Angular 4.3 中的新 httpClient。我知道 api 端点正在接收请求。
我尝试了什么:
- 我试图通过使用 post 人工调用使 angular 脱离循环。但是,我也无法使用我设置为测试的 postman 调用,我得到了同样的错误。
- 我尝试将安全属性从 [AllowAnonymous] 更改为 ** 内置安全属性的 DNN:[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Anonymous)]** 但是我收到以下错误而不是 500 错误:
Authorization has been denied for this request.
- 如果我将安全属性更改为 [DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.View)] ,也会出现与上述相同的错误
我确定我的 web.config 文件支持 POST 操作:
添加名称="ExtensionlessUrl-Integrated-4.0" 路径="*。" verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"
我知道 api 端点被命中,因为如果我使用 GET 而不是 POST 我可以命中 web.pai 代码中的所有断点。以及给定的 "Authorization has been denied for this request" 是由 api 服务提供的。
问题
谁能帮我弄清楚为什么我的 DNN api 和 post 不接受请求?
好吧,难怪这是我的错。我已将 http 请求的授权过程移至新的 httpClient 拦截器。我在创建格式不正确的请求的拦截器函数中遇到错误。修复拦截器后,API 请求现在可以正常工作。
希望这可能对某人有所帮助
我知道你自己得到了答案,但这些链接可能有用:
您可以在此处找到 "scafolding angular project":DNN-Angular-6-7-CLI
以及将项目部署到哪里的 DNN 模块:SPA DNN9:DNN-9.x-SPA-and-Angular-6-7
所有 DNN 的 ASCX:DNN-7.x-8.x-9.x-and-Angular-6-7
全部适用于 dnn webapi 和安全。
我在我的客户中使用了这些项目。
马特奥