Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心MVC Web API部署问题_C#_Asp.net Mvc_Asp.net Core_Asp.net Web Api - Fatal编程技术网

C# ASP.NET核心MVC Web API部署问题

C# ASP.NET核心MVC Web API部署问题,c#,asp.net-mvc,asp.net-core,asp.net-web-api,C#,Asp.net Mvc,Asp.net Core,Asp.net Web Api,我正在尝试使用Web API部署我的ASP.NET核心MVC Web应用程序,也就是说,我在同一文件夹中有MVC和API控制器 它在本地主机上运行良好,但在IIS上创建虚拟目录时,路径会添加到域中 我可以使用window.location.pathname 我可以附加“api/Get”,它的工作原理类似(questions是我的虚拟目录) 但当我导航到其他页面时,控制器名称也会被追加,然后会导致问题 e、 g.如果我导航到“问题”页面(QuestionController),URL将变为 htt

我正在尝试使用Web API部署我的ASP.NET核心MVC Web应用程序,也就是说,我在同一文件夹中有MVC和API控制器

它在本地主机上运行良好,但在IIS上创建虚拟目录时,路径会添加到域中

我可以使用
window.location.pathname

我可以附加“api/Get”,它的工作原理类似(
questions
是我的虚拟目录)

但当我导航到其他页面时,控制器名称也会被追加,然后会导致问题

e、 g.如果我导航到“问题”页面(
QuestionController
),URL将变为

http://example.com/questions/newquestion/api/Question/Create 
而不是

http://example.com/questions/api/Question/Create
我怎样才能修好它

这是我的Asp.Net核心api

    [ApiController]
    public class ScheduleController : ControllerBase
    {    
        [HttpGet]
        public List<PathologistSchedule> GetPathologistScheduleByDate(DateTime taskDate)
        {
            return pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
        }
    }
[ApiController]
公共类ScheduleController:ControllerBase
{    
[HttpGet]
公共列表GetPathLogistScheduleByDate(日期时间任务日期)
{
返回pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
}
}
我使用jquery从PathologistScheduleController的视图调用此api

下面是我得到的错误:

得到http://localhost:51434/PathologistSchedule/api/Schedule/?sort=&group=&filter=&taskDate=2020-11-13T21%3A16%3A47.507Z 404(未找到)

蒂亚


A

如果在一个解决方案中有API和MVC项目,则必须配置解决方案以运行多个项目

您可以对每个API使用这样的路由属性

[Route("~/api/Question/GetAll")]
将为您提供Url
http://example.com/api/Question/GetAll

将给出Url
http://example.com/api/Question/Create

它将不依赖于控制器名称或文件夹

由于问题更新而更新更新: 请使用此代码:


    public class ScheduleController : ControllerBase
    {    
        [Route("~/api/Schedule/GetPathologistScheduleByDate/{taskDate?}")]
        public List<PathologistSchedule> GetPathologistScheduleByDate(DateTime taskDate)
        {
            return pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
        }
    }
但对于API,基本上不需要使用任何控制器或操作名称。您可以使用任何喜欢的名称,例如:

 [Route("~/api/Pathologist/GetSchedule/{taskDate?}")]
or 
 [Route("~/api/GetPathologistSchedule/{taskDate?}")]
or even 
 [Route("~/api/{taskDate?}")]

路由应该是唯一的。

我在“appsettings.json”和“appsettings.Development.json”中添加了一个名为baseURL的变量,并将“appsettings.json”设置为“/VirtualDirectoryName/”,并将“appsettings.Development.json”中的变量保留为“/”。
调用api时附加了这个变量。

它不起作用,我添加了如下路由:[route(“~/api/[controller]”)。我修改了我的问题,添加了一些代码示例。请检查。我不确定使用:[Route(“~/api/[controller]”是否是个好主意。为了测试,请尝试隐式地使用[Route(“~/api/Question/GetAll”)]来执行GetAll操作,等等。不要把任何默认的路线放在控制器的顶部。我刚刚看到你的新代码,它与我建议的完全不同。如果你不听劝告,它就会起作用。这是代码。我会尝试你的建议并让你知道。谢谢。我尝试了你的方法,但我的本地版本中仍然有404。你的问题在
窗口中。位置。路径名
。显示您的客户端代码。

    public class ScheduleController : ControllerBase
    {    
        [Route("~/api/Schedule/GetPathologistScheduleByDate/{taskDate?}")]
        public List<PathologistSchedule> GetPathologistScheduleByDate(DateTime taskDate)
        {
            return pathologistRepository.GetPathologistScheduleByDate(taskDate).ToList();
        }
    }
http://localhost:51434/api/Schedule/GetPathologistScheduleByDate/2020-11-13T21%3A16%3A47.507Z
 [Route("~/api/Pathologist/GetSchedule/{taskDate?}")]
or 
 [Route("~/api/GetPathologistSchedule/{taskDate?}")]
or even 
 [Route("~/api/{taskDate?}")]