Проблема отправки JSON данных из JQuery в REST метод WCF

Это работает в PowerShell в значительной степени тот же путь как решение Chris Ballance в JScript:

 $shell = new-object -comobject "Shell.Application"
 $folder = $shell.Namespace("<path to file>")
 $item = $folder.ParseName("<name of file>")
 $item.InvokeVerb("delete")
22
задан Chase Florell 9 August 2011 в 19:32
поделиться

1 ответ

В обновлении вопроса, содержащего предлагаемое решение, есть некоторые проблемы. Проблема заключается в том, что если ваш ввод не поддерживает метод POST, запрос OPTIONS фактически не возвращает правильные разрешенные заголовки. На самом деле он не смотрит, какие методы на самом деле разрешены в конечной точке WCF - просто искусственно сказано, что «POST» разрешен для каждой конечной точки в приложении, когда клиент выполняет запрос OPTIONS (который действительно является клиентом, спрашивающим, что поддерживается). ).

Это, вероятно, нормально, если вы действительно не полагаетесь на информацию в методе OPTIONS, чтобы вернуть вам действительный список методов (как в случае с некоторыми запросами CORS) - но если вы это сделаете, вы нужно будет сделать что-то вроде решения по этому вопросу: Как обработать AJAX-запрос JQUERY POST с помощью собственного хоста WCF

По сути, каждая конечная точка должна реализовывать:

Webinvoke(Method="OPTIONS", UriTemplate="")

и вызывают соответствующий метод, который загружает надлежащие заголовки в ответ (включая надлежащий список «Access-Control-Allow-Method» для этой конечной точки) вызывающей стороне. Отчасти отстой, что размещенные конечные точки WCF не делают этого для нас автоматически, но это обходной путь, который позволяет более точно контролировать конечную точку. В этом решении надлежащие заголовки ответа загружаются в реализации конечной точки:

public void GetOptions()
    {
        // The data loaded in these headers should match whatever it is you support on the endpoint
        // for your application. 
        // For Origin: The "*" should really be a list of valid cross site domains for better security
        // For Methods: The list should be the list of support methods for the endpoint
        // For Allowed Headers: The list should be the supported header for your application

        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, Accept, Authorization");
    }

В дополнение к этому, вы должны установить флаг «CrossDomainScriptAccessEnabled» либо в web.config для конечной точки привязки, либо в код для WebHttpBinding при настройке конечной точки. В противном случае вы снова лежите в ответе вашего заголовка, когда говорите, что «Access-Control-Allow-Origin» равен «*» (или список URL-адресов)

.
3
ответ дан 29 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: