2014-11-18 2 views
1

Пусть я следующие DTO классыServiceStack несколько значений в одном элементе маршрутизации

public class SumRequest : IReturn<SumResponce> 
{ 
    public int First { get; set; } 

    public int Second { get; set; } 
} 

public class SumResponce 
{ 
    public int Result { get; set; } 
} 

Можно установить маршрутизации стратегию [Маршрут («/ сумма/{Первая}/{Второй}», «GET »)], и он будет работать.

Но что-то вроде [Маршрут ("/ суммы/{Первой} + {Второй}", "GET")] или [Маршрут ("/ суммы/{Первой} плюс {Второго}", "GET")]

Почему это не работает?

ответ

0

ServiceStack переменная {Path} компоненты должны быть разделены либо / или . - так что вы сможете использовать . для переменных разделителей, например:

[Route("/sum/{First}.{Second}")] 
public class Sum : IReturn<SumResponce> 
{ 
    public int First { get; set; } 

    public int Second { get; set; } 
} 

Что вы можете звонить с:

/sum/1st.2nd 

Для получения дополнительной информации о проверке маршрутизации ServiceStack Routing docs.

+0

Спасибо. я понял –

0

Вы можете определить несколько маршрутов для одного и того же DTO. Например:

[Route("/sum/{First}.+.{Second}", "GET")] 
[Route("/sum/{First}.plus.{Second}", "GET")] 
public class SumRequest : IReturn<SumResponce> 
{ 
    public int First { get; set; } 

    public int Second { get; set; } 
} 

public class SumResponce 
{ 
    public int Result { get; set; } 
} 

Edit:

Похоже ServiceStack {Путь} операторы должны быть разделены. или/chars (спасибо Mythz).

Кроме того, если вы используете IIS, чтобы использовать знак плюса (+), вам нужно разрешить двойное экранирование для запросов.

+0

Это странно, но браузер говорит: RequestBindingException Невозможно связать requestStack ServiceStack.Host.RestHandler.CreateRequest (IRequest httpReq, IRestPath restPath) ServiceStack.Host.RestHandler.ProcessRequestAsync (IRequest httpReq, IResponse httpRes, String operationName) при попытке http: // localhost: 8088/sum/1 + 2 –

Смежные вопросы