Это сценарий для областей.
1) Внутри вашего плагина создайте структуру папок
Areas
..Plugin
....Controllers
....Views
2) Внутренние контроллеры создают базовый контроллер плагина «PluginController», где вы установили атрибут Area
[Area("Plugin")]
public class PluginController : Controller
{
...
}
3) Сделайте все свои контроллеры плагинов наследуемыми от PluginController
public class CustomerController : PluginController
{
...
}
4) Добавьте поддержку областей в построитель маршрутов
app.UseMvc(routes =>
{
routes.MapRoute(
name: "defaultWithArea",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}");
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
Теперь все действия внутри вашего плагина потребуют www.mysite.com/plugin/ ...
Также я хочу отметить, что если вы хотите получить URL-адреса действия из-за пределов плагина, вам нужно указать область контроллера следующим образом:
@Url.Action("Edit", "Customer", new { Area = "Plugin" })
Вы забыли инициализировать buffer
. И вам лучше завершить свою строку управления форматом printf (3) с помощью \n
или иначе вызвать fflush (3) перед любым вводом (начиная с stdio (3) [ 117] буферизируется).
Неинициализированный указатель содержит мусор. Его использование - неопределенное поведение . Будьте напуганы !
Так что я предлагаю кодировать
size_t bufsiz = 64;
char *buffer = malloc(bufsiz);
if (!buffer) { perror("malloc buffer"); exit(EXIT_FAILURE); };
и позже
printf("Salut ! Quel est ton nom ?\n");
characters = getline(&buffer,&bufsize,stdin);
В следующий раз включите все предупреждения и информацию отладки, когда компилируя, поэтому скомпилируйте ваш код с помощью gcc -Wall -Wextra -g
, если используете GCC . Вы бы получили несколько предупреждений.
Конечно, прочитайте Как отлаживать небольшие программы и отладка с помощью GDB
В Linux, в В вашем конкретном случае вас может заинтересовать использование readline (3) вместо getline (3) .
Не забудьте прочитать документацию по каждой функции, которую вы используете (например, здесь , если она стандартная C).
Переменная 'buffer' указывает на какой-то адрес мусорной памяти. Сначала вам нужно выделить необходимую память, используя функцию malloc или сделать «буфер» статическим массивом вместо указателя.
getline()
можно использовать двумя различными способами:
Для использования 1. инициализируйте переданный указатель, чтобы указать на действительную память, и передайте также размер последней.
#define INITIAL_SIZE (42)
int main(void)
{
char * buffer = malloc(INITIAL_SIZE * sizeof *buffer);
size_t bufsize = INITIAL_SIZE;
ssize_t characters = getline(&buffer, &bufsize, stdin);
if (-1 == characters)
{
/* handle error. */
}
else
{
/* use buffer */
}
free(buffer); /* Free buffer. */
}
Для использования 2. инициализируйте указатель, переданный NULL
, и передайте 0
как размер.
int main(void)
{
char * buffer = NULL;
size_t bufsize = 0;
ssize_t characters = getline(&buffer, &bufsize, stdin);
if (-1 == characters)
{
/* handle error. */
}
else
{
/* use buffer */
}
free(buffer); /* Free buffer. */
}
Примечание: getline()
возвращает ssize_t
, а не size_t
.