【发布时间】:2016-01-08 10:57:20
【问题描述】:
我正在尝试使用此处给出的代码实现 HMAC 身份验证:http://bitoftech.net/2014/12/15/secure-asp-net-web-api-using-api-key-authentication-hmac-authentication/。
我将此代码集成到我的 ASP.NET Web 表单应用程序中。我创建了一个名为“HMACAPI”的文件夹,并在其中添加了控制器和过滤器。我还安装了所有必需的 Nuget 包。这就是我实现服务方法的方式:
[HMACAuthentication]
[RoutePrefix("api/forms")]
public class FormsController : ApiController
{
[Route("")]
public IHttpActionResult Get()
{
ClaimsPrincipal principal = Request.GetRequestContext().Principal as ClaimsPrincipal;
var Name = ClaimsPrincipal.Current.Identity.Name;
return Ok("test");
}
[Route("")]
public IHttpActionResult Post(string order)
{
return Ok(order);
}
}
这是我的 API 路由配置:
GlobalConfiguration.Configure(APIWebFormsProject.API.WebApiConfig.Register);
但是当我使用client.PostAsJsonAsync() 时,它显示Method Not Allowed 错误。我尝试了各种 SO 问题,但他们的答案都没有帮助。
我尝试了什么:
删除了
WebDAV模块。为 post 方法添加了
[HttpPost]属性。
我正在使用“http://localhost:56697/api/forms/”URL 来访问 API。但我也试过“http://localhost:56697/api/forms”和“http://localhost:56697/api/forms/test”。
更新
按照 Obsidian Phoenix 的建议,我可以在没有 [HMACAuthentication] 属性的情况下运行它。但我想通过 HMAC 身份验证来实现这一点。那么,这可能是什么原因呢?
【问题讨论】:
-
你需要使用
GlobalConfiguration.Configuration.Routes.MapHttpRoute而不是RouteTable.Routes.MapHttpRoute -
@MethodMan 我试过了。还是行不通。抱歉,我打错了。这是
Method Not Allowed错误。 -
检查一下,你有没有'config.MapHttpAttributeRoutes();'作为路线配置的一部分。这里的“配置”是 WebApiConfig 中的“HttpConfiguration”
-
@singsuyash 是的,我已经这样做了。
-
您能否添加示例代码,详细说明您对 API 的客户端调用?
标签: c# asp.net .net asp.net-web-api webforms