Представление 'Index' или его ведущее устройство не были найдены.

Вот простой пример:

using System;
using System.Collections.Generic;
using System.IO;

using Amazon.Lambda.Core;

namespace MySerializer
{
    public class LambdaSerializer : ILambdaSerializer
    {

        public LambdaSerializer()
        {
        }


        public LambdaSerializer(IEnumerable<Newtonsoft.Json.JsonConverter> converters) : this()
        {
            throw new NotSupportedException("Custom serializer with converters not supported.");
        }


        string GetString(Stream s)
        {
            byte[] ba = new byte[s.Length];

            for (int iPos = 0; iPos < ba.Length; )
            {
                iPos += s.Read(ba, iPos, ba.Length - iPos);
            }

            string result = System.Text.ASCIIEncoding.ASCII.GetString(ba);
            return result;
        }


        public T Deserialize<T>(Stream requestStream)
        {
            string json = GetString(requestStream);
            // Note: you could just pass the stream into the deserializer if it will accept it and dispense with GetString()
            T obj = // Your deserialization here
            return obj;
        }


        public void Serialize<T>(T response, Stream responseStream)
        {
            string json = "Your JSON here";
            StreamWriter writer = new StreamWriter(responseStream);
            writer.Write(json);
            writer.Flush();
        }

    } // public class LambdaSerializer

}

В вашей лямбда-функции вы получите следующее:

[assembly: LambdaSerializer(typeof(MySerializer.LambdaSerializer))]

namespace MyNamespace
{

   public MyReturnObject FunctionHandler(MyInObject p, ILambdaContext context)
   {

   }

Обратите внимание, что явное выполнение интерфейса не работает: [115 ]

void ILambdaContext.Serialize<T>(T response, Stream responseStream)
{
   // won't work

Не спрашивайте меня, почему. Я предполагаю, что AWS создает объект и не приводит его к интерфейсу, а ожидает открытых методов.

На самом деле вы можете найти исходный код сериализатора, но в данный момент я не могу его найти. Если я наткнусь на это, я отредактирую этот пост.

По моему опыту, используется только ctor по умолчанию, но для безопасности вам, вероятно, следует добавить конвертеры по умолчанию в ваш сериализатор. Я не беспокоюсь в настоящее время, и все было в порядке.

Надеюсь, это поможет.

Адам.

57
задан Sampath 3 November 2012 в 20:22
поделиться

5 ответов

Проблема заключалась в том, что я использовал MvcRoute.MappUrl из MvcContrib для маршрутизации context.Routes .

Похоже, что MvcContrib отображение маршрутизации было неудобно с маршрутизацией по областям.

4
ответ дан 24 November 2019 в 19:29
поделиться

Добавьте следующий код в Application_Start() метод в Вашем проекте:

ViewEngines.Engines.Add(new RazorViewEngine());
0
ответ дан 24 November 2019 в 19:29
поделиться

Скорее всего, вы не создавали собственный механизм просмотра.
Механизм представлений по умолчанию ищет представления в ~ / Views / [Controller] / и ~ / Views / Shared / .

Вам необходимо создать свой собственный механизм просмотра, чтобы обеспечить поиск видов в папке просмотра областей.

Посмотрите этот пост Фила Хаака.

3
ответ дан 24 November 2019 в 19:29
поделиться

Проверьте сгенерированный код по адресу MyAreaAreaRegistration.cs и убедитесь, что параметр controller установлен на ваш контроллер по умолчанию, иначе контроллер будет вызван bot по какой-то причине ASP.NET MVC не будет искать представления в папке area

public override void RegisterArea(AreaRegistrationContext context)
    {
        context.MapRoute(
            "SomeArea_default",
            "SomeArea/{controller}/{action}/{id}",
            new { controller = "SomeController", action = "Index", id = UrlParameter.Optional }
        );
    }
10
ответ дан 24 November 2019 в 19:29
поделиться

Это все еще проблема в финальной версии.. Когда вы создаете область из контекстного меню / Добавить / Область, Visual Studio не помещает Контроллер в последний аргумент метода MapRoute. . Вам нужно позаботиться об этом, и в моем случае мне приходится ставить его вручную каждый раз, когда я создаю новую область.

1
ответ дан 24 November 2019 в 19:29
поделиться
Другие вопросы по тегам:

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