Я хочу немного расширить ответ, чтобы он также относился к вызову действия операции службы oData. Ответ опубликованный ответ является правильным, но существует определенный порядок, в котором параметры для операции службы должны быть закодированы.
Операции службы oData получают параметры примитивного типа, в которых строки заключены в ', так что действительный URL (предварительное кодирование) будет таким
AddString? Значение = 'o''clock'
Это заставит сервер видеть
AddString? Значение = 'о'
и
'часы'
выдаст «Bad Request - Ошибка в синтаксисе запроса».
Чтобы исправить это, вы должны дважды экранировать 'и UrlEncode его перед вставкой в URL.
Не UrlEncode самого URL.
Вот пример, который будет работать.
// value passed as "o'clock"
public async Task AddString(string value)
{
// Escape ' with '' and UrlEncode value
value = HttpUtility.UrlEncode(value.Replace("'", "''"));
string url = String.Format("AddString?value='{0}'", value);
// No need to UrlEncode url here as dynamic content has already been escaped
// Execute .....
}
[WebGet]
public void AddString(string value)
{
// here value will be "o'clock"
}