Skip to content

HTTP routing with templates as explained in the tutorial does not work. #114

Open

Description

@MarkKharitonov

The scenario displayed in the tutorial at https://github.com/jacksonh/manos/blob/master/docs/tutorial/page-2.md does not work.

The step that is broken is the redirecting issued from the SubmitLink method - manos just does not find the LinkInfo method, which is the target of the redirection.

Debugging the flow reveals that Manos.Routing.StringMatchOperation.IsMatchInternal does not know to match /r/c43fn~ to /r/{id}~. Indeed, here is the code:

internal static bool IsMatchInternal (string the_string, string input, int start, out DataDictionary data, out int end)
{
    if (!StartsWith (input, start, the_string)) {
        data = null;
        end = start;
        return false;
    }

    data = null;
    end = start + the_string.Length;
    return true;
}

public static bool StartsWith (string input, int start, string str)
{
    if (input.Length < str.Length + start)
        return false;

    return String.Compare (input, start, str, 0, str.Length, StringComparison.OrdinalIgnoreCase) == 0;
}

This is the only place that tries to match /r/c43fn~ to /r/{id}~. Once it returns false it is all the way down to HTTP error 404.

I am looking at the master branch 33a14b0 pulled a few hours ago (July 10).

Activity

  1. MarkKharitonov commented on Jul 11, 2011

    @MarkKharitonov
    Author

    OK, I have found the problem.

    RouteAttribute and ManosModule.Route have different semantics. The ManosModule.Route assumes by defaults MatchType.Simple, while RouteAttribute inherits the logic of its base class - HttpMethodAttribute, which defines MatchType.String as the default.

    Adding an explicit MatchType parameter to the RouteAttribute applied to the LinkInfo and Redirector methods from the tutorial fixes the routing.

    I guess this is the problem of the actual implementation and the tutorial being out of sync.

    Now, I think the fact that RouteAttribute and ManosModule.Route have different defaults for the MatchType is a bug. Don't you?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions