2015-10-10 18 views
7

Burada verilen kodu kullanarak http://bitoftech.net/2014/12/15/secure-asp-net-web-api-using-api-key-authentication-hmac-authentication/ numaralı kodu kullanarak HMAC kimlik doğrulaması gerçekleştirmeye çalışıyorum.ASP.NET Web Formları içinde ASP.NET Web API'sini kullanırken "Yöntem İzin Yok" hatası oluştu

Bu kodu ASP.NET web formları uygulamamın içine entegre ettim. "HMACAPI" adlı bir klasör oluşturdum ve içindeki denetleyicileri ve filtreleri ekledim. Gerekli tüm Nuget paketlerini de kurdum. Bu benim rota API için yapılandırma edilir

[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); 
    } 
} 

: Ben client.PostAsJsonAsync() kullandığınızda, bu Method Not Allowed hata

GlobalConfiguration.Configure(APIWebFormsProject.API.WebApiConfig.Register); 

Ama gösteriyor benim hizmet yöntemlerini uygulamak am nasıl budur. Çeşitli SO soruları denedim ama cevaplarının hiçbiri yardımcı olmadı.

Denedim Ne:

  1. WebDAV modülü kaldırıldı.

  2. Eklenme yöntemine [HttpPost] özniteliği eklendi.

API'ye erişmek için "http://localhost:56697/api/forms/" URL'sini kullanıyorum. Ancak "http://localhost:56697/api/forms" ve "http://localhost:56697/api/forms/test" da denedim. Obsidian Phoenix tarafından önerildiği gibi

GÜNCELLEME

Ben [HMACAuthentication] özniteliği olmadan çalıştırmak başardı. Ancak bunu HMAC kimlik doğrulamasıyla uygulamak istiyorum. Peki bunun nedenleri neler olabilir?

+0

yerine Denedim 'RouteTable.Routes.MapHttpRoute' – MethodMan

+0

@MethodMan ait' GlobalConfiguration.Configuration.Routes.MapHttpRoute' kullanmak gerekir. Hala çalışmıyor. Ve üzgünüm yanlış yazdım. 'Yöntem İzin Verilmiyor' hatası. –

+0

Sadece bir çek, 'config.MapHttpAttributeRoutes();' var mı? ' Rota yapılandırmanızın bir parçası olarak. Burada 'config', WebApiConfig – singsuyash

cevap

0

Son olarak, bu çözüldü. Bunun bir çözüm olacağını beklemiyordum. Ben

liman ve Yerel IIS sunucusunu yerine Visual Studio Development Server kullanıldı değiştirdi. Soruyu sormadan önce IIS kullanıyor olmama rağmen bağlantıyı değiştirmenin sorunu çözdüğünü düşünüyorum.

Sorunumu çözme çabalarınız için herkese teşekkürler.Bütün cevaplarınız ve yorumlarınız nedeniyle bu çözüme ulaşabildim. :)

3

Son noktaya HTTP POST (api/formlar) gönderme ile ilgili sorununuzu tahmin ediyorum ve HMACAuth özniteliği ile bir ilgisi yok, değil mi?

bu daha sonra dize olarak Order göndermez durumda, o kadar dize özelliğini, bir şeyler içeren bir POCO nesnesi olarak olmalıdır aşağıda çalışması gerekir:

public class OrderModel 
{ 
    public string Order { get; set; } 
} 
+0

Bunu denedim ve orijinal kodunuzu denedim. Ama her iki durumda da "Görev iptal edildi" hatası alıyorum. –

+0

Sadece HMAC özniteliği olmadan çalışmasını öğrendim. Ancak, uygulamanızda HMAC kullanmak istiyorum. Ne yapabilirim? –

3

Sen bir [FromBody] özelliği eksik senin yöntem.

client.PostAsJsonAsync(url, "test") kullanmak için, yöntem imzası aşağıdaki gibi görünmelidir: Aynı şekilde

[Route("")] 
public IHttpActionResult Post([FromBody] string order) 
{ 
    return Ok(order); 
} 

, bir POCO nesneyi geçtikten:

[Route("")] 
public IHttpActionResult Post([FromBody] OrderModel order) 
{ 
    return Ok(order); 
} 
+0

Bunu denedim ama hala "Görev devredildi." –

+0

Hmac özniteliğini kaldırırsanız hala yapar mı? –

+0

Aslında HMAC özniteliği olmadan çalışıyor. Ama ben HMAC kimlik doğrulamasını kullanmak istiyorum. –