Могу ли я зарегистрировать несколько ресурсов с одним обработчиком и одним URI в Open Rasta? - PullRequest
0 голосов
/ 23 декабря 2011

Я хочу зарегистрировать ресурсы Mutliple с одним обработчиком и одним URI. Поэтому я хочу подтвердить, что это возможно в открытых rasta. Я просмотрел несколько веб-сайтов об открытых раста, но не смог сделать вывод, возможно ли это или нет?

  ResourceSpace.Has
           .ResourcesOfType<Request>()
           .AtUri("/processing")
           .HandledBy<SomeHandler>()
           .TranscodedBy<SomeCodec>();    

Мне нужно обработать все запросы, которые получены из базового класса «Запрос». Было бы здорово, если бы какое-то тело могло пролить свет на это.

Ответы [ 2 ]

2 голосов
/ 26 ноября 2012

В моем довольно ограниченном опыте OpenRasta вы можете использовать метод .And для добавления дополнительных расположений ресурсов .AtUri.

Т.е. в вашем случае

ResourceSpace.Has
       .ResourcesOfType<Request>()
       .AtUri("/processing").And.AtUri("/processing/{processid}")
       .HandledBy<SomeHandler>()
       .TranscodedBy<SomeCodec>();  

где {фигурные скобки}укажите входной параметр вашего метода Handler, например:

public class SomeHandler
{
    public Request Get(int processid = 0) //specify a default value for the uri case /processed
    {
        if (processid == 0)
            return Context.Set<Request>().ToList(); //Context comes from my DbContext derived class which is part of my entity model.
        else
            return GetRequestFromProcessId(processid) //this is a private method in your handler class using Linq to SQL to retreive the data your interested in.  I can't see your handler so I'm making it up.
     }
 } 

В документации OpenRasta я обнаружил примечание, в котором указано, что вы ДОЛЖНЫ иметь определение DestinSpace (только одно) для каждого соответствующего типа и обработчика.Другими словами, вы не должны дублировать один и тот же класс ResourceOfType с тем же классом обработчика HandledBy.Я проверил это, и это именно тот случай, и, возможно, почему вы задаете вопрос в первую очередь.

Nb этот код полностью не проверен, я только что взял образец того, что написал и подставил вваши классы и ури, где известно.Это также предполагает, что вы пытаетесь получить данные из HTTP-запроса GET.Другой участник пошел по маршруту POST, но вы не указали.

2 голосов
/ 24 января 2012

Так что, если все является запросом и вы хотите туннелировать материал, вы можете, используя предоставленную вами регистрацию.

Сопоставление будет выполнено на основе наиболее подходящего типа, поэтому

public void Post(SpecificRequest specificRequest) { /*handles the SpecificRequest type */ }
public void Post(Request myRequest) { /* handles the default case */ }

Тем не менее, имейте в виду, что в системе ReSTful мы стараемся идентифицировать разные вещи с разными URI, что приводит к одной регистрации для каждого типа.

...