2015-02-24 2 views
0

GET работает, но когда POST вызывается, мой сервис отвечает с недопустимым методом 405.Служба WCF REST возвращает 405 для POST

[ServiceContract] 
public interface IRestMeraki 
{ 
    [OperationContract] 
    [WebInvoke(Method = "OPTIONS", UriTemplate = "")] 
    void GetOptions(); 

    [OperationContract] 
    [WebGet(
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "json/")] 
    void JSONData(); 

    [OperationContract] 
    [WebInvoke(Method = "POST", 
    ResponseFormat = WebMessageFormat.Json, 
    BodyStyle = WebMessageBodyStyle.Bare, 
    UriTemplate = "json/{value}")] 
    void Post(string value); 
} 
} 

и мои методы (Получить варианты пытались после reading this)

public void GetOptions() 
    {   
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*"); 
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST, GET, OPTIONS"); 
     WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "Content-Type"); 


    } 

     public void JSONData() 
    { 
     //my code here 
    } 


    public void Post(string value) 
    { 
//my code here 
    } 

Я также добавил обработчики в мой файл конфигурации веб-

<handlers> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <remove name="OPTIONSVerbHandler" /> 
    <remove name="TRACEVerbHandler" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="POST, GET" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 

Я не могу изменить Uri использовать разные для каждого метода. Я использую get для проверки и публикации для получения данных. Wireshark показал эту ошибку 405.

ответ

0

Вам необходимо * в UriTemplate. Я был в состоянии видеть проблему, когда нет *.

UriTemplate = "" // Неправильно

UriTemplate = "*"/Рабочая

ли POST работает, когда вызывается из того же домена?

+0

Нет, это было не так. Я даже не помню, как я получил его на работу, потому что я все испробовал и все изменил в веб-конфигурации, а также изменил контракт на обслуживание. но так как вы единственный, кто ответил. – Redhead